聊天室系统课程设计任务书
Java聊天室的设计与实现毕业设计任务书

4.毕业设计工作进度计划:
起迄日期
工作内容
2017年
2月21日~2月25日
2月25日~3月1日
3月15日~4月15日
4月15日~5月20日
5月25日~6月15日
6月20日~6月25日
查找资料,分析题目
完成开题报告
完成详细设计,提交中期检查相关资料
系统测试、功能修改与完善
完善论文、答辩ppt
论文答辩
学生所在系审查意见:
同意
系主任:
年月日
(三)综合运用所学专业知识,完成系统的总体设计和详细设计。
(四)围绕设计课题展开调研,了解网络聊天室系统的主要功能和实现方法。
(五)研究网络聊天室系统的关键技术,根据课题要求,确定系统的开发方案和技术路线。
(六)掌握软件开发各个阶段中主要文档的编写规范,制定开发计划,按时完成各阶段的软件开发任务和文档编写工作。
2.毕业设计的具体工作内容:
(1)查阅与课题相关的参考文献,分析需求,写出开题报告。
(2)熟悉开发环境与编程语言。
(3)进行系统功能设计和界面设计。
(4)编程实现java聊天室系统。
(5)对系统进行调试,投入使用,进行实践检验。
(6)提交论文、使用说明书及完整程序。
毕业设计任务书
3.对毕业设计成果的要求:
毕业设计任务书
发任务书日期:2017年3月1日
毕业设计任务书
1.毕业设计的任务和要求:
(一)熟悉程序设计的基本知识,深入掌握基于JAVA的网络应用程序开发技术,能够完成基于JAVA的网络即时文本通信系统的设计与开发,掌握数据库的查询、更新、处理。
(二)学习和掌握JAVA技术、网络技术、数据库应用开发技术,为实现网络即时文本通信系统的设计与开发做好技术准备。
聊天室文档

湖南人文科技学院计算机系课程设计说明书课程名称:网站设计课程设计课程代码:题目:聊天室系统年级/专业/班:08级网络工程2班学生姓名:刘凯、凌佩、汪胜任、何广、梁启洪学号: 08420223、08420213、08420222、08420232、08420234指导老师:彭东海开题时间:2010年12月20日完成时间:2010年12月31日课程设计任务书及成绩评定课程名称:聊天室的设计完成者:刘凯、凌佩、汪胜任、何广、梁启洪1、设计的目的与要求(1)用ASP编程,实现一个网络聊天室。
(2)根据这个程序,实现多人上网聊天。
(3)熟悉ASP编程的应用。
2、设计进度及完成情况日期内容09-06-08 需求说明09-06-10 概要设计09-06-12 详细设计09-06-18 程序运行09-06-19 总结3、成绩评定设计成绩:(教师填写)指导老师:(签字)二○○七年月目录摘要 (4)一、需求说明 (5)1.1开发背景 (5)1.2设计目的 (5)1.3项目功能特点 (5)1.4功能需求与性能需求 (5)1.4.1功能需求 (5)1.4.2性能需求 (5)二、概要设计 (6)2.1设计原理 (6)2.2设计模型 (6)2.2.1.功能模块图 (6)2.2.2.系统总体结构图 (6)2.3 模块功能分析 (7)2.3.1用户注册登陆模块 (7)2.3.2用户密码修改模块 (7)2.3.3用户发言模块 (7)2.3.4聊天内容显示模块 (7)2.3.5在线用户列表显示模块 (7)2.3.6在线用户信息的查询模块 (7)三、详细设计 (8)3.1主要代码 (8)四、程序运行 (14)4.1用户登录界面如图 (14)4.2用户注册 (15)4.3聊天室界面如图 (15)4.4在线用户列表如图 (16)4.5数据库用户资料如图 (16)五、总结 (17)5.1开发总结 (17)5.2参考文献 (17)5.3致谢 (17)摘要随着计算机网络技术和信息技术的飞速发展,数据库技术在Internet中的应用越来越广泛,并且起到了举足轻重的作用。
局域网聊天室 JAVA课程设计

《面向对象程序设计》课程设计报告题目:局域网聊天室程序设计院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号:20121183011指导教师:吴奕2014年12月29日至2015年1月9日华中科技大学武昌分校制面向对象程序设计课程设计任务书一、设计(调查报告/论文)题目局域网聊天室程序设计二、设计(调查报告/论文)主要内容内容:用来提供局域网中用户之间的交互通讯,使用Eclipse与JDK1.6工具,操作系统为WINDOWS,采用面向对象方法完成,包括总体设计、详细设计、编码实现、测试。
运用套接字Socket连接技术,实现客户端的套接字对象和服务器端的套接字对象之间的输入输出流的连接,达到数据报通信的目的基本功能与要求:实现聊天室服务器端的要求:①设计实现在特定端口上进行侦听,等待客户端的连接。
②用户确定服务器的侦听端口。
③系统能向已经连接到服务器端的用户发送系统消息。
④系统能统计在线人数。
⑤当系统停止服务时,设计程序应能断开所有的用户连接。
实现聊天室客户端的要求:①系统能连接已经开启聊天服务的服务端。
②用户确定要连接服务器端的IP地址与端口号,连接后系统应能提供显示的用户名。
③当服务器端开启的话,实现用户的登录与注销。
④用户可以通过设计的系统向所有人或者某一个人发送消息。
三、原始资料1.《面向对象程序设计课程设计》指导书2.耿祥义.JAVA大学实用教程.北京:清华大学出版社,2009.四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料[1]张广彬.Java课程设计案例精编(第二版).北京:清华大学出版社,2011.[2]耿祥义.Java课程设计(第二版).北京:清华大学出版社,2008.[3]耿祥义.JAVA大学实用教程.北京:清华大学出版社,2009.[4]邹林达.陈国君Java2程序设计基础.北京:清华大学出版社,2010.[5]邹林达.Java2程序设计基础实验指导.北京:清华大学,2010.指导教师(签名):20年月日目录1需求与总体设计 (1)1.1需求与系统功能图 (1)1.2系统类图 (2)1.2.1服务端系统 (2)1.2.2客户端服务系统 (3)2详细设计 (4)2.1聊天室服务器端的设计 (4)2.1.1ChatServer类 (4)2.1.2ServerListen类 (5)2.1.3ServerReceive类 (5)2.1.4PortConf类 (6)2.1.5Help类 (6)2.1.6UserLinkList类 (7)2.1.7Node类 (7)2.2聊天室客户端设计 (8)2.2.1ChatClient类 (8)2.2.2ConnectConf类 (9)2.2.3UserConf类 (9)2.2.4Help类 (10)2.2.5ClientReceive类 (10)3编码实现 (11)3.1服务器编码实现 (11)3.1.1ChatServer类 (11)3.1.2ServerListen类 (21)3.1.3ServerReceive类 (23)3.1.4PortConf类 (27)3.1.5UserLinkList类 (30)3.1.6Node类 (31)3.1.7Help类 (32)3.2客户端编码实现 (34)3.2.1ChatClient类 (34)3.2.2ClientReceive类 (46)3.2.3ConnectConf类 (48)3.2.4UserConf类 (51)3.2.5Hlep类 (54)4系统测试 (56)总结 (57)1需求与总体设计1.1需求与系统功能图本系统所要实现的主要功能是为广大用户提供一个借助网络进行人际交往的平台。
JavaEE课程设计(电子档)简易聊天室,网上购物

枣庄学院信息科学与工程学院课程设计任务书题目: 简易聊天室,网上购物学号:姓名:专业:计算机应用技术课程:J2EE应用开发指导教师:职称:导师完成时间:2012 年11月----2012 年12 月枣庄学院信息科学与工程学院制课程设计任务书及成绩评定实验原理(算法流程)如果用户输入了错误的用户名或者密码则会响应登陆失败:out.println("<title>登录失败</title>");out.println("<h1>登录失败,请重新登陆</h1>");3、登陆成功进入聊天室:创建会话监听:public class counterListener implements HttpSessionListener 创建会话时调用HttpSessionListener的方法。
销毁会话(使其无效)时调用HttpSessionListener的方法。
在此处添加您的代码:sessionDestroyed(HttpSessionEvent evt);定义一个日期格式:SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd hh:mm") 把字符串按照约定的格式转换成一个日期类型:Date contentTime=new Date();String dateString =timeformat.format(contentTime);4、主函数:定义主函数的扩展:Main extends HttpServlet编码转换:response.setContentType("text ml;charset=GB2312")定义用户名和密码:String userID=request.getParameter("userID");写入小组成员的姓名和学号如:if(userID.equals("孙少伟")&&password.equals("09066062")){request.getSession().setAttribute("userID",userID);RequestDispatcher dispatcher=request.getRequestDispatcher("webchat");若果输入错误则重新设置。
java网络聊天室课程设计报告(内附代码)

课程设计之马矢奏春创作网络聊天室院(系) 别信电学院班级计算102学号姓名指导教师时间418—510课程设计任务书题目网络聊天室课程设计系 (部) 信电学院专业计算机科学与技术班级计算102 学生姓名学号4月 18 日至 5 月 10 日共 4 周指导教师(签字)系主任(签字)年月日成绩评定表目录课程设计概述2222学生信息管理系统软件总体设计223学生信息管理软件详细设计446参考文献37摘要私達の実践の能力を高めるため、学んだ知識を運用することができて行って更に創造して、学校は特に2週間手配して、私達にVisual C++の課程の設計の実習を行わせます.このファイルの詳しい説明はVisual C++6.0環境の下で、1つのソフトウェアの過程を設計して、このソフトウェアは各種のデータの個数を統計したのです.このソフトウェアの機能は、ユーザーは1段の文字を入力して、ソフトウェアは文字の中の各類のデータの数を記録して、英文のデータの数、数字のデータの数、空欄のデータの数とそれのタイプのデータの数を含んで、そしてそれらを明らかに示します.以下、課程を通して説明を設計して、データはソフトウェアの説明を統計して、プログラムは説明を調整して、総括などの方面を開発して、詳しくこのプログラムの製作の過程を説明して、作用、各種の実行することができる把持.关键字:データの統計,VC++6.0, ヘッドファイル课程设计概述`随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、德律风等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为现今社会人们主流的联系方式.因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为肯定潮水.因此呈现了QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,可是,娱乐功能太多,有很多吸引人的娱乐功能,从一定水平上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具.目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中年夜部份都是绝对的C/S模式,对远程服务器有非常年夜的依赖性,没有完全实现点对点的交流.为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流.防止了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接.因此,这个软件是极具适应性和实用性的即时通讯软件.实现网络聊天的功能,采纳Windows Socket(或Java Socket)编程,服务器与客户端采纳了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处置,服务器端是所有信息的中心.服务器端要保管用户信息,可利用数据库来实现这一功能,需要建立用户信息数据库.在客户端可采纳文件系统保管聊天纪录和用户号码.可通过闪动托盘图标和播放分歧的音乐提示信息到来及好友上线等信息.可通过建立消息链表来保管用户接收的各种消息.运行环境:Windows 9x、2000、XP、Windows 7需要环境:JDK 1.6以上、eclipse开发环境硬件环境:CPU 400MHz以上,内存512MB以上学生信息管理系统软件总体设计该C/S模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求.当多个用户同时连接到服务器时,经由服务器的接收与转发即可以实现客户之间的通信.对整体系统的流程,也是分为两部份,即客户真个发起请求,服务器响应请求.首先是客户真个登岸,客户端在登岸时,必需设置所想要连接的服务器,然后客户端就会根据设置的服务器IP地址,向服务器发起建立连接请求.而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给以后的发起端分配一个服务线程,用于处置它的各种请求.对客户真个各种请求,实际上都是通过在客户发往服务器的各种字符流区分的,具体的方法就是在消息的头部以及尾部添加特殊字符串,从而实现服务器抵消息请求的识别.比如对登岸信息,消息的头部就是“PEOPLO”,而对私聊中的消息,头部就是“SEC”,其他的同理都添加了头部.固然,对客户端来说,这些都是透明的,用户的把持并没有受就任何影响.在服务器端,消息被检测分析后,变回根据具体的目的进行处置,比如是私聊消息,服务器便会根据其尾部的目的信息,向目标端转发该条消息.这里额外要说的是,该系统特另外对用户发来的消息进行了加密处置,即用户的各种具体信息,不单能够防止向第三方的泄漏,而且即使服务器端呈现异常,信息也不会泄漏.对私聊的方式,该系统所采纳的方法类似于QQ的通信方式,由发起方主动连接,当目的方接收到连接请求后,会主动建立一个私聊窗口,从而实现私聊.学生信息管理软件详细设计由于这里界面设计源代码比力简单,这里不再列出.3.1.1 服务器界面设计服务器界面登岸界面注册界面聊天室界面列举部份实现通信功能的主要代码publicclass AppServer extends Thread {private ServerSocket serverSocket;private ServerFrame sFrame; privatestaticVectoruserOnline = newVector(1, 1); privatestaticVectorv = newVector(1, 1);/*** 创立服务器启动服务监听1001端口**/public AppServer() {sFrame = new ServerFrame();try {serverSocket = new ServerSocket(1001);// 获取服务器的主机名和IP地址InetAddress address = InetAddress.getLocalHost(); sFrame.txtServerName.setText(address.getHostName());sFrame.txtIP.setText(address.getHostAddress());sFrame.txtPort.setText("1001");} catch (IOException e) {fail(e, "不能启动服务!");}sFrame.txtStatus.setText("已启动...");this.start(); // 启动线程}/*** 退出服务器** @param e* 异常* @param str* 退出信息*/publicstaticvoid fail(Exception e, String str) {System.out.println(str + " ." + e);}/*** 监听客户的请求,当有用户请求时创立 Connection线程*/publicvoid run() {try {while (true) {// 监听并接受客户的请求Socket client = serverSocket.accept(); new Connection(sFrame, client, userOnline, v); // 支持多线程// System.out.println("userLength:"+userLength);}} catch (IOException e) {System.out.println("不能监听");}}/*** 启动服务器*/publicstaticvoid main(String args[]) {new AppServer();}}publicclass ServerFrame extends JFrame implements ActionListener {publicJListlist;/****/privatestaticfinallongserialVersionUID = 8936397327038098620L;// 服务器信息面板JPanel pnlServer, pnlServerInfo;JLabel lblStatus, lblNumber, lblMax, lblServerName, lblProtocol, lblIP, lblPort, lblLog;public JTextField txtStatus, txtNumber, txtMax, txtServerName, txtProtocol, txtIP, txtPort;JButton btnStop, btnSaveLog;public TextArea taLog;JTabbedPane tpServer;public TextArea taMessage;// 用户信息面板JPanel pnlUser;public JLabel lblMessage, lblUser, lblNotice, lblUserCount;JListlstUser;JScrollPane spUser;JTextField txtNotice;JButton btnSend, btnKick;public String ti = "";public String serverMessage ="";public ServerFrame() {// 服务器窗口super("[HappyChat]聊天服务器");setSize(550, 500);setDefaultClo搜索引擎优化peration(JFrame.EXIT_ON_CLOSE);setResizable(false);Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();// 在屏幕居中显示Dimension fra = this.getSize();if (fra.width > scr.width) {fra.width = scr.width;}if (fra.height > scr.height) {fra.height = scr.height;}this.setLocation((scr.width fra.width) / 2,(scr.height fra.height) / 2);// ==========服务器信息面板=========================pnlServer = new JPanel();pnlServer.setLayout(null);pnlServerInfo = new JPanel(new GridLayout(14, 1));pnlServerInfo.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(""), BorderFactory.createEmptyBorder(1, 1, 1, 1)));lblStatus = new JLabel("以后状态:");txtStatus = new JTextField(10);txtStatus.setEditable(false);lblNumber = new JLabel("以后在线人数:"); txtNumber = new JTextField("0 人", 10); txtNumber.setEditable(false);lblMax = new JLabel("最多在线人数:");txtMax = new JTextField("50 人", 10);txtMax.setEditable(false);lblServerName = new JLabel("服务器名称:"); txtServerName = new JTextField(10); txtServerName.setEditable(false);lblProtocol = new JLabel("访问协议:"); txtProtocol = new JTextField("HTTP", 10); txtProtocol.setEditable(false);lblIP = new JLabel("服务器IP:");txtIP = new JTextField(10);txtIP.setEditable(false);lblPort = new JLabel("服务器端口:");txtPort = new JTextField("8000", 10);txtPort.setEditable(false);btnStop = new JButton("关闭服务器(C)"); btnStop.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent arg0) {closeServer();}});lblLog = new JLabel("[服务器日志]");taLog = new TextArea(20, 50);btnSaveLog = new JButton("保管日志(S)"); btnSaveLog.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent arg0) {saveLog();}});pnlServerInfo.add(lblStatus);pnlServerInfo.add(txtStatus);pnlServerInfo.add(lblNumber);pnlServerInfo.add(txtNumber);pnlServerInfo.add(lblMax);pnlServerInfo.add(txtMax);pnlServerInfo.add(lblServerName); pnlServerInfo.add(txtServerName); pnlServerInfo.add(lblProtocol);pnlServerInfo.add(txtProtocol);pnlServerInfo.add(lblIP);pnlServerInfo.add(txtIP);pnlServerInfo.add(lblPort);pnlServerInfo.add(txtPort);pnlServerInfo.setBounds(5, 5, 100, 400);lblLog.setBounds(110, 5, 100, 30);taLog.setBounds(110, 35, 400, 370);btnStop.setBounds(200, 410, 120, 30); btnSaveLog.setBounds(320, 410, 120, 30); pnlServer.add(pnlServerInfo);pnlServer.add(lblLog);pnlServer.add(taLog);pnlServer.add(btnStop);pnlServer.add(btnSaveLog);// ===========在线用户面板==================== pnlUser = new JPanel();pnlUser.setLayout(null);lblMessage = new JLabel("[用户消息]");taMessage = new TextArea(20, 20);lblNotice = new JLabel("通知:");txtNotice = new JTextField(20);btnSend = new JButton("发送(S)");btnSend.setEnabled(true);btnSend.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent arg0) {serverMessage();}});lblUserCount = new JLabel("在线总人数 0 人"); btnKick = new JButton("踢人(K)");btnKick.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent arg0) {tiRen();}});lblUser = new JLabel("[在线用户列表]");lstUser = newJList();lstUser.setVisibleRowCount(17);lstUser.setFixedCellWidth(180);//指定的固订单位格宽度值,而不是从列表元素计算而来的宽度值lstUser.setFixedCellHeight(18);spUser = new JScrollPane();spUser.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);spUser.getViewport().setView(lstUser);lblMessage.setBounds(5, 5, 100, 25);taMessage.setBounds(5, 35, 300, 360);lblUser.setBounds(310, 5, 100, 25);spUser.setBounds(310, 35, 220, 360);lblNotice.setBounds(5, 410, 40, 25);txtNotice.setBounds(50, 410, 160, 25);btnSend.setBounds(210, 410, 80, 25);lblUserCount.setBounds(320, 410, 100, 25);btnKick.setBounds(440, 410, 80, 25);pnlUser.add(lblMessage);pnlUser.add(taMessage);pnlUser.add(lblUser);pnlUser.add(spUser);list = newJList();list.setListData(new String[] { "" });spUser.setViewportView(list);pnlUser.add(lblNotice);pnlUser.add(txtNotice);pnlUser.add(btnSend);pnlUser.add(lblUserCount);pnlUser.add(btnKick);// ============主标签面板======================== tpServer = new JTabbedPane(JTabbedPane.TOP); tpServer.add("服务器管理", pnlServer);tpServer.add("用户信息管理", pnlUser);this.getContentPane().add(tpServer);setVisible(true);}protectedvoid serverMessage() {// TODO 自动生成方法存根this.serverMessage = txtNotice.getText();txtNotice.setText("");}protectedvoid closeServer() {// TODO 自动生成方法存根this.dispose();}protectedvoid saveLog() {// TODO 自动生成方法存根try {FileOutputStream fileoutput = new FileOutputStream("log.txt", true);String temp = taMessage.getText();fileoutput.write(temp.getBytes());fileoutput.close();JOptionPane.showMessageDialog(null, "记录保管在log.txt");} catch (Exception e) {System.out.println(e);}}protectedvoid tiRen() {// TODO 自动生成方法存根ti = list.getSelectedValue().toString();log("Ti:"+ti);}privatevoid log(String string) {// TODO 自动生成方法存根String newta = taMessage.getText();newta += ("\n"+string);taMessage.setText(newta);}publicvoid actionPerformed(ActionEvent evt) {publicstaticvoid main(String args[]) { new ServerFrame();}}publicclass Connection extends Thread { /*** 与客户端通讯Socket*/private Socket netClient;/*** 在线用户列表*/private Vector<Customer> userOnline; /*** 聊天信息*/private Vector<Chat> userChat;/*** 从客户到服务器输入流*/private ObjectInputStream fromClient; /*** 传到客户端打印流private PrintStream toClient;/*** 注册用户列表*/privatestaticVectorvList = newVector();/*** 临时对象*/private Object obj;/*** 服务器日志窗体*/private ServerFrame sFrame;@SuppressWarnings("unchecked")/*** 创立与客户端通讯*/public Connection(ServerFrame frame, Socket client, Vector u, Vector c) { netClient = client;userOnline = u;userChat = c;sFrame = frame;try {// 发生双向通信// 检索客户输入fromClient = new ObjectInputStream(netClient.getInputStream());// 服务器写到客户toClient = new PrintStream(netClient.getOutputStream());} catch (IOException e) {try {netClient.close();} catch (IOException e1) {System.out.println("不能建立流" + e1); return;}}this.start();}/*** 处置与客户真个通讯线程*/publicvoid run() {try {// obj是Object类的对象obj = (Object) fromClient.readObject();if (obj.getClass().getName().equals("Customer")) {// serverLogin();serverLoginDB();}if (obj.getClass().getName().equals("Register_Customer")) {// serverRegiste();serverRegisteDB();}if (obj.getClass().getName().equals("Message")) {serverMessage();}if (obj.getClass().getName().equals("Chat")) {serverChat();}if (obj.getClass().getName().equals("Exit")) {serverExit();}} catch (IOException e) {System.out.println(e);} catch (ClassNotFoundException e1) {System.out.println("读对象发生毛病!" + e1);} finally {try {netClient.close();} catch (IOException e) {System.out.println(e);}}}/*** 登录处置*/@SuppressWarnings("deprecation")publicvoid serverLogin() {try {Customer clientMessage2 = (Customer) obj;// 读文件FileInputStream file3 = new FileInputStream("user.txt");ObjectInputStream objInput1 = new ObjectInputStream(file3);vList = (Vector) objInput1.readObject();int find = 0; // 查找判断标识表记标帜// System.out.println(find);for (int i = 0; i < vList.size(); i++) {Register_Customer reg = (Register_Customer) vList.elementAt(i);if (reg.custName.equals(clientMessage2.custName)) {find = 1;if (!reg.custPassword.equals(clientMessage2.custPassword)) {toClient.println("密码不正确");break;} else {// 判断是否已经登录int login_flag = 0;for (int a = 0; a < userOnline.size(); a++) {String _custName = ((Customer) userOnline.elementAt(a)).custName;if (clientMessage2.custName.equals(_custName)) {login_flag = 1;break;}}if (userOnline.size() >= 50) {toClient.println("登录人数过多,请稍候再试");break;}if (login_flag == 0) {clientMessage2.custHead = reg.head;// getUserHeadByName(clientMessage2.custName);userOnline.addElement(clientMessage2);toClient.println("登录胜利");Date t = new Date();log("用户" +clientMessage2.custName + "登录胜利,"+ "登录时间:" + t.toLocaleString() + "\n");freshServerUserList();break;} else {toClient.println("该用户已登录");}}} else { continue;}}if (find == 0) {toClient.println("没有这个用户,请先注册");}file3.close();objInput1.close(); fromClient.close();} catch (ClassNotFoundException e) {System.out.println(e);} catch (IOException e) {System.out.println(e);}}/**** 登录处置** @throws Exception*/@SuppressWarnings("deprecation")publicvoid serverLoginDB() {try {Customer clientMessage2 = (Customer) obj;String name = clientMessage2.custName;String pass = clientMessage2.custPassword;String sql = "select * from yonghu where custName='" + name + "'";ResultSet rs = DB.executeQuery(sql);System.out.println("sql:" + sql);boolean login = false;String head="";while (rs.next()) {String ps=rs.getString("custPassword").toString();System.out.println("ps:["+ps+"]");System.out.println("pass:["+pass+"]");if (ps.equals(pass.toString())) {login = true;System.out.println("logined:");}System.out.println("compareTo:"+pareTo(pass));head=rs.getString("head");System.out.println("head:"+rs.getString("head"));}System.out.println("login:"+login);if (!login) {toClient.println("密码不正确");return;}// 判断是否已经登录int login_flag = 0;for (int a = 0; a < userOnline.size(); a++) {String _custName = ((Customer)userOnline.elementAt(a)).custName;if (clientMessage2.custName.equals(_custName)) {login_flag = 1;break;}}if (userOnline.size() >= 50) {toClient.println("登录人数过多,请稍候再试");return;}if (login_flag == 0) {System.out.println("head:"+head);clientMessage2.custHead =head;// getUserHeadByName(clientMessage2.custName);userOnline.addElement(clientMessage2);toClient.println("登录胜利");Date t = new Date();log("用户" + clientMessage2.custName + "登录胜利," + "登录时间:"+ t.toLocaleString() + "\n");freshServerUserList();return;} else {toClient.println("该用户已登录");}fromClient.close();} catch (Exception e) {e.printStackTrace();}}/*** 刷新服务器日志窗体在线列表**/privatevoid freshServerUserList() {String[] userList = new String[50];Customer cus = null;for (int j = 0; j < userOnline.size(); j++) {cus = (Customer) userOnline.get(j);userList[j] = cus.custName;}sFrame.list.setListData(userList);sFrame.txtNumber.setText("" + userOnline.size());sFrame.lblUserCount.setText("以后在线人数:" + userOnline.size());// System.out.println("fresh ok");}/*** 注册处置*/@SuppressWarnings( { "unchecked", "deprecation" })publicvoid serverRegiste() {try {int flag = 0; // 是否重名判断标识表记标帜Register_Customer clientMessage = (Register_Customer) obj;File fList = new File("user.txt");if (fList.length() != 0)// 判断是否是第一个注册用户{ObjectInputStream objInput = new ObjectInputStream( new FileInputStream(fList));vList = (Vector) objInput.readObject();// 判断是否有重名for (int i = 0; i < vList.size(); i++) {Register_Customer reg = (Register_Customer) vList.elementAt(i);if (reg.custName.equals(clientMessage.custName)) {toClient.println("注册名重复,请另外选择");flag = 1;break;} elseif (reg.custName.equals("所有人")) {toClient.println("禁止使用此注册名,请另外选择");flag = 1;break;}}}if (flag == 0) {// 添加新注册用户vList.addElement(clientMessage);// 将向量中的类写回文件FileOutputStream file = new FileOutputStream(fList);ObjectOutputStream objout = new ObjectOutputStream(file);objout.writeObject(vList);// 发送注册胜利信息toClient.println(clientMessage.custName + "注册胜利");Date t = new Date();log("用户" + clientMessage.custName + "注册胜利, " + "注册时间:"+ t.toLocaleString() + "\n");file.close();objout.close();fromClient.close();}} catch (ClassNotFoundException e) {System.out.println(e);} catch (IOException e) {System.out.println(e);}}/*** 注册处置*/@SuppressWarnings( { "unchecked", "deprecation" })publicvoid serverRegisteDB() {try {intflag = 0; // 是否重名判断标识表记标帜Register_Customer clientMessage = (Register_Customer) obj;String sql = "select * from yonghu where custName='"+ clientMessage.custName + "'";ResultSet rs = DB.executeQuery(sql);System.out.println("sql:" + sql);boolean reg = false;while (rs.next()) {reg = true;ResultSetMetaData rsmd = rs.getMetaData();int numberOfColumns = rsmd.getColumnCount();for(int i=1;i<=numberOfColumns;i++){String me=rsmd.getColumnName(i);String v=rs.getString(i);System.out.println(me+":"+v);}System.out.println();}System.out.println("reg:"+reg);if (reg) {toClient.println("注册名重复,请另外选择");return;}if (clientMessage.custName.equals("所有人")) {toClient.println("禁止使用此注册名,请另外选择");return;}sql = "insert intoyonghu(custName,custPassword,age,sex,email,head) values('"+ "','"+ "','"+ "','"+ "','"+ "','" + clientMessage.head + "')";System.out.println("c:"+sql);DB.executeUpdate(sql);toClient.println(clientMessage.custName + "注册胜利");Date t = new Date();log("用户" + clientMessage.custName + "注册胜利, " + "注册时间:"+ t.toLocaleString() + "\n");fromClient.close();} catch (Exception e) {e.printStackTrace();System.out.println(e);}}/*** 发送信息处置*/publicvoid serverMessage() {try {Message mess = new Message();erOnLine = userOnline;mess.chat = userChat;mess.ti = sFrame.ti;mess.serverMessage = "" + sFrame.serverMessage;ObjectOutputStream outputstream = new ObjectOutputStream(netClient.getOutputStream());outputstream.writeObject((Message) mess);netClient.close();outputstream.close();} catch (IOException e) {}}/*** 增加信息处置*/publicvoid serverChat() {// 将接收到的对象值赋给聊天信息的序列化对象Chat cObj = new Chat();cObj = (Chat) obj;// chenmincObj.chatMessage = WordFilter.filter(cObj.chatMessage);chatLog(cObj);// 将聊天信息的序列化对象填加到保管聊天信息的矢量中userChat.addElement((Chat) cObj);return;}/*** 用户退出处置*/@SuppressWarnings("deprecation")publicvoid serverExit() {Exit exit = new Exit();exit = (Exit) obj;removeUser(exit);// chenminif (sFrame.ti.equals(exit.exitname)) {sFrame.ti = "";}Date t = new Date();log("用户" + exit.exitname + "已经退出, " + "退出时间:" + t.toLocaleString());freshServerUserList();}/*** 在线用户中删除退出用户** @param exit* 退出用户名对象*/privatevoid removeUser(Exit exit) {// TODO 自动生成方法存根Vector<Customer> vec = new Vector<Customer>();Customer _cus = null;for (int j = 0; j < userOnline.size(); j++) {_cus = (Customer) userOnline.get(j);if (!exit.exitname.equals(_cus.custName)) {vec.add(_cus);}// System.out.println("list:"+_cus.custName);}userOnline.removeAllElements();for (int j = 0; j < vec.size(); j++) {_cus = (Customer) vec.get(j); userOnline.add(_cus);}}/*** 日志服务器窗体写信息** @param log* 日志信息*/publicvoid log(String log) {String newlog = sFrame.taLog.getText() + "\n" + log; sFrame.taLog.setText(newlog);}/**** 日志服务器窗体写聊天信息*** 聊天信息对象*/@SuppressWarnings("deprecation")publicvoid chatLog(Chat obj) {String newlog = sFrame.taMessage.getText();Date date = new Date();if (!obj.whisper) {newlog += "\n";newlog += ("[" + date.toLocaleString() + "]");newlog += obj.chatUser;newlog += ">";newlog += obj.chatToUser;newlog += ":";newlog += obj.chatMessage;}String text = "";text += obj.chatUser;text += ">";text += obj.chatToUser;text += ":";text += obj.chatMessage;String sql ="insert into logs(text,shijian)values('"+text+"','"+date.toLocaleString()+"')";try {System.out.println(sql);DB.executeUpdate(sql);} catch (Exception e) {// TODO Autogenerated catch blocke.printStackTrace(); }sFrame.taMessage.setText(newlog);}}创作时间:二零二一年六月三十日设计体会及今后的改进意见为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再缔造,学校特安插我们进行为期二周的Visual C++课程设计实习,并安插了指导老师帮手辅导,让我们在规范化、严谨化、实用化上面有了很年夜进展.在此次字符统计法式开发过程中,有很多工具值得我们思考并总结.开发过程年夜体可分为以下几个步伐:(1)思考总体设计方案:总体结构和模块外部设计,功能分配.思考要实现整个法式年夜体需要的几个模块和其中用到的Visual C++语言基本把持符、语句等.(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想.(3)流程图具体化:即将流程图中的几年夜模块的具体实现思考清楚,可以用流程图的形式展现.并想好实现的关键代码.(4)编纂法式代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不竭改进.如何实现各函数功能,到达预期效果也将是一项繁复的工作.(5)代码的调试:在Visual C++6.0环境下输入代码并进行调试和正确运行.在调试过程中会遇到很多需要精化的处所,需要十足的耐心与细心,不竭改进完善法式.(6)最后修饰:法式可以正确运行之后,再不影响法式功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,把持更人性化.增强法式的新意与可行性.通过这次课程设计,使我们更加熟悉的掌握了Visual C++语言的运用.帮手我们熟悉了更多Visual C++语言的功能,提高了我们的入手能力,学到了许多解决实际问题的贵重经验.同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣.我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于立异.参考文献1)电子工业出书社《JSP实用教程》,郑阿奇编著2)电子工业出书社《JAVA法式设计实用教程》,叶核亚编著考资料创作时间:二零二一年六月三十日。
网络聊天室毕业设计任务书

一、课题背景、目的、意义课题背景互联网技术的广泛应用,对整个世界政治、经济、文化等各方面产生了十分广泛和深远的影响。
它奇迹般地崛起、爆炸般地扩容,令全世界瞩目。
如今,大大小小的网络已遍布全球,并通过Internet实现了互联。
据估计,Internet的规模大约每年要翻一番,网络的应用领域也从做出的科技和教育领域,很快进入到文化、产业、政治、经济、新闻、体育、娱乐、商业以及服务行业。
课题目的完成一个基于浏览器/服务器方式的多功能的网络聊天应用系统,客户通过浏览器可以发送信息,然后其他所有用户接收到该信息并将其显示在界面中,服务器对信息进行有关处理并向适当的用户发送,同时在服务器端还将显示所有的在线用户。
每个用户能通过Internet和其他用户用文本和声音进行聊天。
课题意义由于网络有以下几个特点使得开发网络聊天室变得很必要:(1)便捷性:只要有浏览器和网络,你就可以任何时间任何地点登陆聊天室;(2)广泛性:聊天室系统具有开放性,许多非互联网络上的用户可以通过网与互联网络上的用户相互沟通。
(3)即时性:它可以做到即使发送即使接受的效果,相比于电子邮件在时间上更加优势;(4)廉价性: 网络的空间几乎是无限的,但价格相对于所获的得信息而收取的费用却是如此的低廉。
相对手机收费而言,聊天室更让人接受。
二、课题的主要内容及要求(要求详实、具体、准确)该课题要求在充分了解计算机课程教学的前提下,使用开发语言,通过B/S技术来设计与实现系统的相关功能,同时界面要友好简单,对于数据的处理要合理与完善。
总体设计思路,把总的系统主要分成以下三个模块。
1.登陆模块:为普通用户服务,主要包括:a)注册:普通用户可在登陆界面注册新用户。
b)登陆:注册好的用户可以通过输入用户名和密码进行登陆聊天模块进行聊天。
2.聊天模块:为已注册的用户服务,主要包括:a)公共聊天:用户可以在公共房间进行讨论聊天。
b)私人聊天:用户可以选择与指定的用户悄悄话聊天,别人是看不到的。
课程设计任务书--即时聊天系统

《JAVA程序设计》课程设计任务书--即时聊天系统一、课程设计任务与目的本课程设计要求学生对《即时聊天系统》进行分析、设计及编程实现。
要求该系统实现服务器端和客户端功能,可以在企业内部网络和互联网上运行。
可以和好友进行交流,信息即时发送,即时回复,传输文件等功能。
界面友好。
本课程设计对课程设计项目已经作了较为详细的分析及相关知识讲解,通过课程设计,促使学生专业技能得到综合训练,让学生了解软件开发基本技术和工作过程。
同时,本课程设计中将会让学生了解JAVA程序设计中一些高级技术。
通过本系统的开发,同学门要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养同学们从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。
二、系统开发步骤软件开发一般有以下步骤:1. 问题定义2. 可行性研究3. 需求分析4. 总体设计5. 详细设计6. 编码及单元测试7. 综合测试8. 软件维护其中1、2、3步可以整合为调研分析阶段,4、5、6、7步可以整合为项目实施阶段。
根据本次课程设计的实际情况,我们着重进行系统设计和编码实施。
该阶段主要工作有:1.系统结构的总体设计决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。
2.数据结构定义定义软件处理的对象——类,定义数据处理流程。
3.详细设计对各功能模块的功能定义,说明模块之间的调用关系与接口(参数)。
4.编码及调试根据详细设计的要求,按照统一的要求和编码规范,用JAVA语言编码实现,同时负责每个模块的独立调试。
5.综合测试软件开发的后期是软件装配和综合测试。
软件测试一般有专业的测试人员,同时通过发布使用试用版(体验版)等方式让用户体验、测试。
在多次测试改进后,才正式发布。
三、系统功能需求描述1.客户端注册新用户功能。
2.客户登录功能。
3.添加/删除好友功能。
4.消息收发功能。
5.好友上下线提示。
6.用户基本信息管理。
聊天室课程设计

聊天室课程设计一、课程目标知识目标:1. 学生能理解并掌握网络聊天室的基本概念,了解其功能和用途;2. 学生能够运用所学的词汇和语法知识,进行流畅的网络交流;3. 学生能够识别并使用网络聊天室中的常用表达方式和礼貌用语。
技能目标:1. 学生能够熟练操作网络聊天室软件,包括发送消息、接收消息和表情使用等;2. 学生能够运用所学的交际技巧,与他人进行有效的网络对话;3. 学生能够通过聊天室进行信息搜索和问题解答,提高信息获取和处理能力。
情感态度价值观目标:1. 学生能够树立正确的网络交流意识,尊重他人,保持友善和礼貌的态度;2. 学生能够意识到网络聊天室的积极作用,如增进友谊、拓展知识等;3. 学生能够认识到网络聊天室的潜在风险,学会保护个人隐私,遵守网络道德规范。
课程性质:本课程为信息技术与英语学科的融合课程,旨在提高学生的网络交流能力和英语实际应用能力。
学生特点:六年级学生已具备一定的英语基础和计算机操作技能,对网络聊天室充满好奇,但可能缺乏安全意识和正确使用网络的能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过互动交流、案例分析等方式,培养学生的网络沟通能力和信息安全意识。
将课程目标分解为具体学习成果,便于教学设计和评估。
二、教学内容1. 网络聊天室基本概念:介绍网络聊天室的定义、功能、分类及其在日常生活和学习中的应用场景。
教材章节:《信息技术》第五章第三节“网络交流工具”2. 网络聊天室操作技巧:教授如何注册、登录聊天室,发送消息、接收消息、使用表情和图片等功能。
教材章节:《信息技术》第五章第四节“网络聊天工具的使用”3. 网络聊天室交际礼仪:讲解网络聊天室中的礼貌用语、表达方式以及尊重他人、保护隐私等原则。
教材章节:《英语》第六单元“Social Etiquette”4. 网络安全与道德:引导学生了解网络聊天室的安全风险,教育学生保护个人信息,遵守网络道德规范。
教材章节:《信息技术》第五章第五节“网络安全与道德”5. 实践活动:组织学生进行网络聊天室模拟对话,提高实际应用能力和网络沟通技巧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院计算机科学与技术系课程设计报告2011~2012学年第二学期课程WEB课程设计课程设计名称聊天室学生姓名高文泉学号1001014008专业班级软件服务外包10级计本(4)班指导教师许强檀明屠菁张艳明2012年6月12日课程设计任务书................................................................. 错误!未定义书签。
目录..................................................................................... 错误!未定义书签。
第一章、绪论 (3)1.1题目简要描述 (3)1.2团队分工安排 (3)第二章、系统需求分析 (3)2.1问题描述 (3)2.2系统功能 (3)第三章、系统设计 (4)3.1逻辑以及物理结构 (4)3.2系统的开发环境选择........................................... 错误!未定义书签。
3.3系统的数据库设计............................................... 错误!未定义书签。
3.4系统的界面设计 (6)第四章、系统实现及测试 (8)4.1主要模块的实现 (8)4.2系统实现过程中遇到的主要疑难问题和解决方案 (8)4.3系统实现的特色之处 (13)4.4系统的测试开展 (13)第五章、总结 (13)第六章、参考文献 (14)一、绪论1.1课程设计名称:聊天室设计内容:设计一个在线聊天室,实现用户之间实时地文字聊天。
任务和要求系统内用户分为管理员和普通用户两类,普通用户可以在线聊天,管理员负责维护聊天室和用户。
1 系统功能和界面参考QQ聊天室。
2 提供注册功能,系统的访问者可以注册成为普通用户。
3 普通用户登陆后首先显示聊天大厅,在大厅中有多个聊天室,选择其中一个进入后可进行聊天。
4 用户在聊天室中可以看到本聊天室的其他用户,可以对所有人发言,也可以只对某一个用户发言。
发言可以选择公开和秘密两种,如果公开则所有人都能看到该发言内容;如果是秘密,则只有接受者才能看到。
聊天室的发言面板采用滚屏方式实时显示所有用户的发言5 用户可以退出聊天室,到大厅后再选择进入其他聊天室,也可以从大厅退出系统。
6 管理员登陆后可以维护聊天室和用户。
管理员可以增加、修改和删除聊天室,可以删除注册的普通用户。
1.2团队分工:1、注册、登录部分选择聊天室部分:黄彭2、聊天发言部分:高文泉(本人)3、管理员维护添加修改删除部分:秦红旭二、系统需求分析2.1问题描述题目要求的是做一个聊天室软件,能够实现多人同时在线聊天,客户能够登录系统注册并且选择房间进入房间,在相应的房间类可以对其它人私聊或者公共聊天而管理员能够对相关房间进行添加删除修改的操作。
2.2系统功能依据题目,首要问题是如何实时进行聊天并且分情况显示。
因此系统需要将用户发的信息的内容存入数据库并对其进行依据用户名分情况依序显示。
为了实现这个目标,首先用户发送消息,系统将消息保存到数据库,根据用户发言房间决定显示房间,如果在这个房间,如果用户选择私聊则分辨是不是对所有人说话,是则对所有人显示消息否则只是对发送者和被发送者显示,如果用户选择公开,则将结果显示给房间的所有人。
流程图如下:聊天流程图三、系统设计3.1系统采用的逻辑以及物理结构普通用户进入网页进行登录或者注册,完成后选择房间,进入房间进行聊天,用户可以退出房间进入房间选择页面,可以在房间选择页面选择退出系统。
管理员直接后台登录地房间、用户进行查询、增加、修改、删除等操作,从而实现数据库更新。
整体流程图3.2 系统的开发环境选择tomcat6.5+SQL server2005 + Java JDK 6.0+Myeclipse6.53.3 系统的数据库设计,各表展示以及表与表之间的E-R关系图Chat数据库:表汇总表名功能说明用户信息表(userbiao) 存放用户信息房间表(room) 存放房间相关信息聊天信息表(msgs) 存放用户聊天信息表1 用户信息表userbiao序号字段名类型是否为空是否主键描述1 userId int 否是记录标志2 userName nvarchar 是否用户名称3 userpwd nvarchar 否否用户密码4 5 userxbroomidnvarcharint是是否否性别房间号表2 房间信息表room序号字段名类型是否为空是否主键描述1 userid int 否是记录标志2 roomname nvarchar 是否房间名3 roomnumber Int 是否房间人数4 5 roomfullnumberroomplaceIntnvarchar是是否否房间最大人数房间地区表3 聊天信息表msgs序号字段名类型是否为空是否主键描述1 NO int 否是记录标志2 username nvarchar 是否发言者3 who nvarchar 是否发言对象4 5 6 7kindmsgtimeroomidnvarcharnvarchartimeint是是是是否否否否发言形式发言信息发言时间发言房间位置E-R图3.4 系统的界面设计方案一:用框架设置方案设计1图方案二:DIV方案设计2图方案三:最终版本方案设计3图四、系统实现及测试4.1主要模块的实现本人承担的是聊天部分的实现,所有内容存放在2/文件夹内,其中由index.jsp, Ace.html ,top.jsp,chat1.jsp,chat2.jsp,Send.jsp,Save.jsp,Exit.jsp,Dante.jsp.Luccifer.jsp组成,styles.css作为CSS布局。
Index.jsp 是作为和登陆界面后的房间选择界面的一个接口,将用户名和房间号存入session并且跳转到框架中去。
并且通过对数据库操作,对数据库room进行更新。
将房间内人数加一"update room set roomnumber=roomnumber+1 where roomid='"+room+"'";当其他文件需要使用session中的房间号和用户名是需要使用以下语句:String username=(String)session.getAttribute("username");int room=Integer.parseInt((String)session.getAttribute("roomid"));Ace.html是一个frame框架,将聊天室中的其它模块整合在一起,其中包括top.jsp,chat1.jsp,chat2.jsp,Send.jsp,Save.jsp, Dante.jsp多个jsp文件聊天界面top.jsp是顶部图片以及房间名显示,以及后台音乐的播放,通过对数据库的房间表的查询,用id来查询房间并将房间名显示出来。
顶部界面Chat1.jsp是作为公共聊天部分,只要是没设为私聊的房间内容都会在此显示,为了让数据库中语句按顺序将前60个房间内对话显示,本部分使用了select * from msgs where (kind='1' or who='所有人')and NO in(select top 60 NO from msgs where roomid='"+room+"'order by time DESC)order by time的数据库操作,先将数据库中的信息所有和房间名匹配的60个信息选择出来,再对其中kind(种类,即代表发言人选择的聊天类型公开/私聊)=1(公开)的或者是对所有人说的话的信息进行选取,选取后处理结果对其中信息显示通过if(!((rs.getString("who")).equals("所有人") )){ out.print("对"+rs.getString("who")+"说:");}语句来将对所有的的公开信息中去掉对***这条信息。
公共聊天部分Chat0.jsp中对数据库进行查询:select * from msgs where kind='0' and((userName='"+username+"')or(who='"+username+"')) and NOT (who ='所有人') and NO in(select top 60 NO from msgs where roomid='"+room+"'order by time DESC)order by time先选取60个本房间的信息,再对其中不是对所有人并且用户名是发言者或者用户名是接受者的信息进行选取。
在对其中信息逐个显示。
用<meta http-equiv="Refresh" content="2">来对其中页面进行自动刷新从而更新显示。
私聊部分Send.jsp作为发送部分将表单信息发送到Sava。
Jsp进行存储。
其中Send.jsp 显示用户名、并在下拉列表显示所有房间其他成员,能够选择公开或者私聊的单选按钮组,以及发言信息和发送按钮、退出链接。
发送信息部分Save.jsp接受来自Send.jsp中的信息并将其中信息存储到数据库之中,其中使用SQL语句Getdate()读取当前时间并存入数据库。
其中的数据库操作语句如下:"Insert into msgs ( userName,who,kind,msg,time,roomid ) values('"+username+"','"+whom+"','"+kind+"','"+msg+"',Getdate(),'"+room+"')";Dante.jsp主要将房间中所有用户进行显示,并且通过2/Luccifer.jsp的链接可以选择是否查看房间内所有用户的信息。
Luccifer.jsp中显示当前房间所有用户信息。