java课程设计报告.doc_第1页
java课程设计报告.doc_第2页
java课程设计报告.doc_第3页
java课程设计报告.doc_第4页
java课程设计报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

大 连 科 技 学 院Java课程设计报告题 目 “即时通”网络通信系统的设计与开发 学生姓名 田文超 专业班级 软件工程(莱)12-2 指导教师 刘瑞杰 职 称 讲师 所在单位 信息科学系软件工程教研室 教学部主任 王立娟 完成日期 2014年12月26日课程设计报告单学号1206030213姓名田文超专业班级软件工程(莱)12-2考 核 项 目评分备注1平时工作态度及遵守纪律情况(10分)2掌握基本理论、关键知识、基本技能的程度和阅读参考资料的水平(10分)3独立工作能力、综合运用所学知识分析和解决问题能力及实际工作能力提高的程度(20分)4完成课程设计说明书及软件的情况与水平(小组分工情况、规范性、整洁清楚、叙述完整性、思路清晰程度、工作量及实际运行情况和创新性)(60分)总评成绩综 合 评 定:(优、良、中、及格、不及格) 指导教师签字:2014年12月26日Java课程设计任务书一、课程设计任务及要求:任务:针对小型信息管理系统或若干综合性设计题目,选择一种软件开发模型,完成从需求分析、系统设计、系统实现,软件测试的全过程。要求:(1)根据软件系统开发的一般原则,完成相应系统的功能设计,完成主要功能模块的程序实现并进行测试训练,给出代码运行结果和相应的设计文档。可以分组进行,但所有学生必须经历整个系统的开发全过程,以便加深对系统开发全过程的认识。(2)提交课程设计报告。(3)指标: 要求完成课程设计报告3000字以上(约二十页);完成所设计的题目,设计题目的语句行数的和在200行语句以上。二、工作量2周(10个工作日)时间三、计划安排第1个工作日第2个工作日:查找相关资料、书籍,阅读示例文档;设计程序结构、模块图、完成类的设计。第3个工作日第7个工作日:完成程序的编码,并且自己调试、测试。穿插进行项目文档的撰写。第8个工作日第9个工作日:撰写和整理项目文档。第10个工作日:由教师检查软件测试效果、项目文档,给出学生本课程成绩。指导教师签字:2014年12月15日目录题目:11.需求分析12.概要设计12.1系统总的设计思路12.2体系结构12.3功能模块图13.详细设计34.编码34.1在登陆界面设置用户名和密码不能为空并给出提示34.2如果用户登陆成功如何直接进入聊天界面.34.3如何设置性别,是用户注册后性别显示在数据库表中45.调试分析56.测试结果及运行效果57.系统开发所用到的技术88.课程设计总结8参考文献9附录 全部代码10题目:“即时通”网络通信系统的设计与开发1.需求分析即时通,是一个类似于QQ的网络通讯软件,系统包含了登陆界面,注册界面和聊天界面。用户通过登陆进入聊天界面和好友进行聊天,用户如果没登陆的用户名和密码可以通过注册后再登录进入聊天界面和好友聊天。2.概要设计使用JAVA开发一个类似QQ的网络通讯系统,该系统能够进行用户管理,聊天通讯及系统管理。 该聊天室系统包括客户端和服务器端。本系统使用JAVA SWING技术进行前台界面的设计和开发, 使用Socket 与 ServerSocket网络编程进行客户端与服务器端的连接与通信,使用Java输入输出流进行客户端与服务器端之间的数据传输,使用JDBC技术与后台数据库进行连接和访问。该系统将能够实现用户登录功能,并能对用户信息进行增加,删除,修改和查询。登录的用户将可以进行群发,私聊及文件发送和接收。系统总体架构如下:即时通系统管理通讯用户管理图2-1 即时通总体框架图2.1系统总的设计思路首先设计系统管理,其次设计用户管理,再次设计通讯,最后设计数据库操作。2.2体系结构具体为客户端的设计,服务端的设计和公共端的设计。2.3功能模系统管理登陆界面登陆处理用户管理创建用户界面维护用户界面用户管理处理通讯聊天主界面聊天界面文件发送界面文件接收界面通讯处理数据库操作数据操作封装图2-2各功能模块流程图编号功能名操作组件程序1系统管理登录界面LoginGui.java登录处理LoginManager.java 2用户管理创建用户界面UserAddGui.java维护用户界面UserEditGui.java用户管理处理UserManager.java 3通讯聊天主界面MainChatGui.java聊天界面ChatGui.java文件发送界面FileSendGui.java文件接收界面FileReceiverGui.java通讯处理ChatManager.java4数据库操作数据操作封装JDBCUtil.java表2-1 个模块主要任务3.详细设计1 “即时通”系统包括三个工程,工程一包括四个程序,分别为:登陆(Login.java),注册(Register.java),聊天(Chat.java),客户工作者(ClientWorker.java);工程二包括四个程序,分别为:DB帮助者(DBHelper.java),信息(Message.java),信息服务(MessageService.java),用户(User.java);工程三包括两个程序,分别为:服务器(QQServer.java),服务器(ServerWorker.java)。2 运行服务器QQServer.java程序,在运行客户端的登陆,客户可以在登陆界面输入自己的用户名和密码点击“登陆”,如果用户名和密码都正确,点击“登陆”按钮会弹出提示框“登陆成功”,点击“确定”按钮将会进入到聊天界面;如果用户名或密码错误点击“登陆”按钮会弹出提示框“登陆失败”,如果用户名或密码为空点击“登陆”按钮会弹出提示框“用户名或密码不能为空”,如果点击“取消”按钮,你的用户名和密码将会被清空,点击“注册”,会直接进入注册界面。3 运行服务器QQServer.java程序,在运行客户端的注册,客户可以在注册界面输入自己的用户名,密码,确认密码,昵称,性别,爱好,城市,职称。如果用户名和密码错误会弹出注册失败,如果用户名写了,密码没写会弹出提示框“密码不能为空”,如果密码写了,密码没写会弹出提示框“用户名不能为空”,如果用户名和密码注册过,会弹出提示框该“用户已存在,请更换用户名”。如果用户名,密码,确认密码都正确会弹出提示框“注册成功”。昵称,性别,爱好,城市,职称可以不写。4 运行服务器QQServer.java程序,在运行客户端的登陆,登陆成功后,客户进入到聊天界面。可以连续登陆无数个用户,他们可以同时和其他的人聊天,输入要发送的内容再选中对象即可,如果在输入内容没有选择发送的对象将会弹出提示框“请选择好友”,如果没有输入内容就发送给好友将会弹出提示框“输入内容不能为空”。4.编码4.1在登陆界面设置用户名和密码不能为空并给出提示?解决方案:用if语句写一段代码: String name = nameItem1.getText(); if(name= null |.equals(name) JOptionPane.showMessageDialog(this,用户名不能为空,请重新输入。,异常提示,JOptionPane.ERROR_MESSAGE); return; char pwd=pwdItem1.getPassword(); String pwd1 = new String(pwd); if(pwd.length=0) JOptionPane.showMessageDialog(this,密码不能为空,请重新输入。,异常提示,JOptionPane.ERROR_MESSAGE); return; 4.2如果用户登录成功如何直接进入聊天界面?解决方案:在点击“确定”按钮事件,加上聊天界面的代码,代码如下: String r=(String)result11.getBody(); if(r=null)/登陆成功 JOptionPane.showMessageDialog(this,登陆成功,弹出提示, JOptionPane.INFORMATION_MESSAGE); java.awt.EventQueue.invokeLater(new Runnable() public void run() new Chat(u,s).setVisible(true); ); this.dispose(); 4.3如何设置性别,使用户注册后性别显示在数据库表中?解决方案:在登录代码final User u = new User(name,pwd1l);中填入null,在注册代码 添加: String Sex=null; if(Item1.isSelected() Sex=Item1.getText(); else if (Item2.isSelected() Sex=Item2.getText(); else if (Item3.isSelected() Sex=Item3.getText(); else if(Item4.isSelected() Sex=Item4.getText(); 在DBHelper.java代码 pstm=con.prepareStatement(insert into modo (userName,userPwd,userSex) + values(?,?,?);modo中添加userSex,values中加入? 在代码 pstm.setString(1, u.getUserName(); pstm.setString(2,u.getUserPwd(); 中加入pstm.setString(4,u.getUserSex();在User.java中加入 private String userSex; public User(String userName, String userPwd ,String userSex) this.userSex = userSex; public String getUserSex() return userSex; public void setUserSex(String userSex) this.userSex = userSex; 在数据库表设计表中加userSex即可。测试:用Access数据库制作表格,配置数据源,运行QQserver,在运行登陆,注册,聊天。问题1:如果该用户已经登陆成功没有下怎么能使该用户不能再次登陆。解决方案:用if语句判断该用户是否已登录,若已登录则再次登陆时显示登陆失败。代码如下: if(usersOnLine.containsKey(u) return 用户已经登陆; /检测用户名是否存在 if(!DBHelper.getInstance().isUserExistes(u.getUserName() return 用户已存在; 问题2:若用户输入的消息后没有选中好友就发送怎么提示用户没有选中好友?解决方案:用数组合if语句来编写如下代码 String Username; Object listname=usersListItem.getSelectedValues(); if(listname.length=0) JOptionPane.showMessageDialog(this,请选择聊天好友。,异常提示,JOptionPane.INFORMATION_MESSAGE); return;5.调试分析在用户登陆的过程中,若用户输入的密码错误,则给出提示并让用户重新输入密码;在用户注册的过程中,若用户不小心把注册信息填写错误,则给出提示并让用户重新填写注册信息;在通讯过程中,聊天内容发送错误系统不会给出提示,如果是文件发送错误,在没有发送成功是用户可以主动的取消发送,经过一系列的分析调试最终把问题解决了6.测试结果及运行效果(1)程序运行时,则系统管理界面显示如图6-1所示: 图6-1系统广利界面的显示效果(2)程序运行时,则用户管理界面显示如图6-2所示: 图6-2 用户注册的界面(3)程序运行时,则用户聊天界面显示如图6-3所示: 7.系统开发所用到的技术Microsoft Windows XPNetBeans IDEAccess数据库Java程序组件8.课程设计总结经过两周的JAVA课程设计的实习,在老师的细心指导下,我发现了JAVA语言的价值所在,尽管上了十五周的JAVA课,但是我觉得我没学到什么东西,有的代码还看不懂,更不用说写一个好的程序出来。老师从设计界面开始,一直教到我们把基本程序都做出来,我们就像刚出生的孩子一样什么都不会,如果没有老师的指导,我觉得我们绝不可能设计开发出这个程序。网上说JAVA语言很有前景,未来的市场很好,现在很多地方都应用了,之前都不知道它到底是怎么创出那么多的财富的,书上写的都是代码。一直对着书看代码还真看不出它的作用。现在的大型银行和企业的系统都是用JAVA语言设计开发出发的。老师鼓励我们好好学它对我们今后的生活有利,学好了我们今后将会容易找到工作。参考文献1 吕凤翥,马皓. Java语言程序设计(第2版)M.北京:清华大学出版社,2010 期刊 2 石振国. 用JSP实现对Web数据库的访问J. 计算机应用,2010(05):5-8.4 萨师煊,王珊.数据库系统概论高等教育出版社,2002年2月5 耿祥义,张跃平。java2实用教程第四版清华大学出版社2012年8月第4版附录 全部代码ChartGui.javapublic class ChartGui extends javax.swing.JFrame private User u; private Socket s;/就是登陆成功的管道 final static int MAXUSER=100; /最多可同时聊天一百个人 public ChartGui() initComponents(); public JList getUsersList() return ListItem; public void setchat2Item(String usersChart) String s=this.chat2Item.getText()+usersChart; this.chat2Item.setText(s); /* Creates new form ChartGui */ public ChartGui(User u,Socket s) initComponents(); this.u=u; this.s=s; this.setTitle(u.getUserName(); /秘书类,用以不断的接收消息 new ClientWorker(s,this).start(); public void addUsers(List list) DefaultListModel dlm=(DefaultListModel)ListItem.getModel(); for(User u:list) dlm.addElement(u); public void addNewUser(User u) DefaultListModel dlm=(DefaultListModel)ListItem.getModel(); dlm.addElement(u); public void delUser(User curu) DefaultListModel dlm=(DefaultListModel)ListItem.getModel(); dlm.removeElement(curu); private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) / TODO add your handling code here: User NUser=new UserMAXUSER;String UsersName;int i=0;/ =usersList.getSelectedValues();for(Object a:ListItem.getSelectedValues()NUseri=(User)a;i+;int j=0;UsersName=NUserj.getUserName();j+;for(;NUserj!=null;j+)UsersName=UsersName+,+NUserj.getUserName();String text= chatItem.getText();if(NUser=null)JOptionPane.showMessageDialog(this, 请在在线好友中选择你要聊天的好友, 异常提示, JOptionPane.INFORMATION_MESSAGE);return;if(text=null)JOptionPane.showMessageDialog(this, 发送信息不能为空!, 异常提示, JOptionPane.INFORMATION_MESSAGE);return;elseString UsersText=this.chat2Item.getText()+n+您对+UsersName+说:n+this.chatItem.getText()+n;chatItem.setText(null);this.chat2Item.setText(UsersText);Message chartM=new Message(4,u,NUser,text);MessageService.getInstance().sendMsg(chartM, s);public JList getListItem() return ListItem; public void setUsersChartText(String usersChart) String s=this.chat2Item.getText()+usersChart; this.chat2Item.setText(s); LoginGui public Socket connectServer() Socket s=null; try s=new Socket(1,6666); catch(Exception e) e.printStackTrace(); return s; private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) / TODO add your handling code here: final LoginGui gui=this; java.awt.EventQueue.invokeLater(new Runnable() public void run() RegisterGUI dialog = new RegisterGUI(gui, true); dialog.setLocationRelativeTo(gui); dialog.setVisible(true); private void jButton3MouseClicked(java.awt.event.MouseEvent evt) / TODO add your handling code here: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) / TODO add your handling code here: nameItem.setText(null); pwdItem.setText(null); this.dispose(); private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) String name=nameItem.getText(); System.out.println(用户名:+name); char pwd=pwdItem.getPassword(); String pwd1=new String(pwd); System.out.println(密码:+pwd1); if(name=null|.equals(name ) JOptionPane.showMessageDialog(this,用户名不可为空,异常提示,JOptionPane.ERROR_MESSAGE); return; / TODO add your handling code here: if(pwd=null|.equals(pwd1) JOptionPane.showMessageDialog(this,密码不可为空,异常提示,JOptionPane.ERROR_MESSAGE); return; /发送name 和pwd到服务器 /连接服务端 final Socket s=this.connectServer(); /构造消息 final User u=new User(name,pwd1,null,null,null); /以后只发送u代表它们 Message msg=new Message(1,u); /0 代表登陆 /执行发送 MessageService.getInstance().sendMsg(msg,s); /接受消息【接收登陆结果】 Message result=MessageService.getInstance().receiveMsg(s);/收消息只传管道Sokect s / 取出登陆成功的标志 String r=(String)result.getBody(); if(r=null)/注册成功 JOptionPane.showMessageDialog(this, 登陆成功, 提示, JOptionPane.INFORMATION_MESSAGE); /打开聊天界面 java.awt.EventQueue.invokeLater(new Runnable() public void run() new ChartGui(u,s).setVisible(true); ); this.dispose(); else JOptionPane.showMessageDialog(this, 登陆失败:+r+! 请重试., 提示, JOptionPane.ERROR_MESSAGE); ServerWorker public class ServerWorker extends Thread private static Map usersOnLine = new HashMap(); private Socket s; ServerWorker(Socket s) this.s = s; public void run() /处理客户端请求 /(1)注册的 (2)登陆的 (3) 聊天的。 /接收消息 s MessageSercie while (true) Message msg = MessageService.getInstance().receiveMsg(s); /根据消息类型判断处理 if (msg.getType() = 0) /注册 /客户端注册的消息 /取出用户信息 User u = (User) msg.getBody(); String result = register(u);/执行注册,result是注册结果(kong :成功 xxx失败 /把注册结果发给客户端 Message msg1 = new Message(); msg1.setBody(result); MessageService.getInstance().sendMsg(msg1, s); break;/注册成功后,不需要收消息 else if (msg.getType() = 1) /登陆 /取出用户信息 User u = (User) msg.getBody(); String result = login(u);/执行注册,result是注册结果(kong :成功 xxx失败 /把注册结果发给客户端 Message msg1 = new Message(); msg1.setBody(result); MessageService.getInstance().sendMsg(msg1, s); /登陆成功的情况下,才会处理 if (result = null) /处理在线用户问题 /给刚登陆的用户发送在线用户列表 Set users1 = usersOnLine.keySet();/装有所有在线用户的集合 Set不能再网络传递 List users = new ArrayList(); users.addAll(users1);/把集合中的用户加入链表 /把集合(users1)发送给刚登陆的客户(u) /构造消息 Message msg2 = new Message(2, users); /发送消息 给当前登陆用户发-管道s MessageService.getInstance().sendMsg(msg2, s); /给已经登陆过的用户发送新用户上线消息 Message newUserMsg = new Message(3, u); for (User cur : users) /循环中的每个用户都要发一次消息 /获取用户对应的管道 Socket curS = usersOnLine.get(cur);/根据用户,获取其存在map中的管道 MessageService.

温馨提示

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

评论

0/150

提交评论