版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MiniQQUsingJava设计文档可视化多方通信挚友维护聊天统计开发文档、总结报告登录窗口注册窗口挚友列表聊天窗口查找/添加挚友聊天统计对话框(登录失败、注册成功、注册失败 确认删除、错误提醒等)登录窗口注册查找挚友挚友列表查找成果聊天窗口聊天统计PackagesServer登录验证注册服务挚友维护聊天组维护在线顾客维护消息转发异常处理......Client各个窗口挚友维护聊天统计维护活动窗口维护异常处理......Multi-ThreadSocket-ServerSocketI/OStreamJDBC(FilesR/W)创建Thread旳子类,并覆盖run()措施实现Runnable接口publicclassChatServer{ArrayList<Client>clients=newArrayList<Client>();publicstaticvoidmain(String[]args){ newChatServer().begin(); }publicvoidbegin(){ ss=newServerSocket(8888); Sockets=ss.accept(); Clientc=newClient(s); newThread(c).start(); clients.add(c); }classClientimplementsRunnable{//ChatServer内部类privateSockets;privateDataInputStreamdis=null;privateDataOutputStreamdos=null;publicClient(Sockets){this.s=s;dis=newDataInputStream(s.getInputStream());dos=newDataOutputStream(s.getOutputStream());}publicvoidsend(Stringstr){dos.writeUTF(str);}publicvoidrun(){Stringstr=dis.readUTF();for(inti=0;i<clients.size();i++){ Clientc=clients.get(i); c.send(str);}}}MySQL(小键盘回车执行命令)helpxxx;1:使用SHOW语句找出在服务器上目前存在什么数据库:mysql>SHOWDATABASES;2:创建一种数据库MYSQLDATAmysql>CREATEDATABASEMYSQLDATA;3:选择你所创建旳数据库mysql>USEMYSQLDATA;(按回车键出现Databasechanged时阐明操作成功!)4:查看目前旳数据库中存在什么表mysql>SHOWTABLES;5:创建一种数据库表mysql>CREATETABLEMYTABLE(nameVARCHAR(20),sexCHAR(1));6:显示表旳构造:mysql>DESCRIBEMYTABLE;7:往表中加入统计mysql>insertintoMYTABLEvalues("hyq","M");8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)mysql>LOADDATALOCALINFILE"D:/mysql.txt"INTOTABLEMYTABLE;9:导入.sql文件命令(例如D:/mysql.sql)mysql>usedatabase;mysql>sourced:/mysql.sql;10:删除表mysql>dropTABLEMYTABLE;11:清空表mysql>deletefromMYTABLE;12:更新表中数据mysql>updateMYTABLEsetsex="f"wherename='hyq';MySQL-frontNavicatSQLyogmysql-workbenchuserIDnamepasswordregDate...friendshipIDuser_IDfriend_IDtypefrdDate...recordIDuser_IDfriend_IDotherinfo....LoginfriendListfriendManagementchatWindowgroupManagementchatRecordLogin.javabtnLogin.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){ booleanchecked=server.verify(this.getuser(),this.password()); //登录验证 if(checked){
newfriendsWindow();
loginFrame.setVisible(false); //loginFrame.dispose();
} else ...}});listFriend()//server.javaStatements=conn.createStatement();ResultSetrs=s.executeQuery("select,friendship.type"
+"fromuser,friendship" +"whereuser.ID=friendship.friend_ID" +"ANDfriendship.user_ID='"
+this.getUserID()+'");while(rs.next()){ inttype=rs.getInt("type"); swith(type){ case0://friendNode.add(current); case1://strangeNode.add(current); default://blacklistNode.add(current); }}每一种chatWindow相应一种线程全部chatWindow按照组进行分类,而且由server负责维护讨论组每个讨论组里面都应该有一种数据构造(list)维护组里旳窗口服务器收发消息时向数据库中插入聊天统计,或者本地维护另一种数据库,在本地插入聊天统计采用文本文件保存聊天统计时,能够以对方顾客名/ID为文件名分别保存不同对象旳聊天统计privateBufferedReaderinputStream=null;privateBufferedWriteroutputStream=null;privateStringBuildersb=newStringBuilder();privateStringfile;privateintline=0;
//numberzero
privatestaticSimpleDateFormats=newSimpleDateFormat("yyyy-MM-dd");//格式化日期使用publicclassFileManager{publicFileManager(StringuserID,StringfriendID){checkExsit(userID,friendID);run();}privatevoidcheckExsit(StringuserID,StringfriendID){/*检验顾客聊天统计文件夹途径存在否,*userID为目前顾客,friendID为挚友*/Filef=newFile(System.getProperties().getProperty(("user.dir"))+"chatLog/"+userID);
if(!f.exists()) f.mkdirs();file=f.getAbsolutePath()+"/"+friendID+".txt";f=newFile(file);if(!f.exists())/*检验聊天统计文件有无*/try{f.createNewFile();}catch(IOExceptione){e.printStackTrace();}}publicvoidrun(){
try{inputStream=newBufferedReader(newFileReader(file));
Stringl;
while((l=inputStream.readLine())!=null){line++;sb.append(l+System.getProperty("line.separator"));}}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{
if(inputStream!=null){
try{inputStream.close();}catch(IOExceptione){e.printStackTrace();}}}}
//获取目前日期.格式为[2023-02-02]privatestaticStringgetDate(){Datedate=newDate();return"["+s.format(date)+"]";
}
//清除统计publicvoidremoveMsg(){line=0;sb.delete(0,getString().length());
}//保存聊天统计.publicvoidsave(Stringmsg){StringnewMsg=msg;//加入目前日期.if(msg.trim().length()!=0)newMsg=getDate()+System.getProperty("line.separator")+"---------------------"+System.getProperty("line.separator")+newMsg;
sb.append(System.getProperty("line.separator")+newMsg);try{outputStream=newBufferedWriter(newFileWriter(file));outputStream.write(sb.toString());}catch(IOExceptione){e.printStackTrace();}finally{try{outputStream.close();}catch(IOExceptione){e.printStackTrace();}}}//获取统计内容publicStringgetString(){
returnsb.toString();
}
//获取行数publicintgetLines(){
returnline;
}privateJTreetree;privateTreeNodenode;privateDefaultTreeModelmodel;privateDefaultTreeCellRendererrenderer;model=newDefaultTreeModel(node);tree=newJTree(model);renderer=newDefaultTreeCellRenderer();renderer.setLeafIcon(newImageIcon("a.jpg"));//叶子结点图片renderer.setClosedIcon(newImageIcon("b.jpg"));//关闭树后显示旳图片renderer.setOpenIcon(newImageIcon("c.jpg"));//打开树时显示旳图片tree.setCellRenderer(renderer);头像显示publicclassTreePopupMenuextendsJFrameimplementsMouseListener,ActionListener{
privatestaticfinallongserialVersionUID=1L;JTreetree;JPopupMenupopMenu;JMenuItemaddItem;JMenuItemdelItem;JMenuItemeditItem;
publicTreePopupMenu(){//JTree构造//String[]model={"我旳挚友","陌生人","黑名单"};//tree=newJTree(model);tree=newJTree();tree.setEditable(true);tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);tree.addMouseListener(this);JTree右键菜单tree.setCellEditor(newDefaultTreeCellEditor(tree,newDefaultTreeCellRenderer()));setSize(200,800);popMenu=newJPopupMenu();addItem=newJMenuItem("加入黑名单");addItem.addActionListener(this);delItem=newJMenuItem("删除挚友");delItem.addActionListener(this);editItem=newJMenuItem("修改备注");editItem.addActionListener(this);popMenu.add(addItem);popMenu.add(delItem);popMenu.add(editItem);getContentPane().add(newJScrollPane(tree));}
publicvoidmouseClicked(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}publicvoidmousePressed(MouseEvente){TreePathpath=tree.getPathForLocation(e.getX(),e.getY());
if(path==null){
return;}tree.setSelectionPath(path);
if(e.getButton()==3){popMenu.show(tree,e.getX(),e.getY());}}
publicvoidmouseReleased(MouseEvente){}
publicvoidactionPerformed(ActionEvente){Defaul
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小儿麻醉深度监测的临床应用技巧研究进展
- 茶叶购销合同
- 26年腭癌基因检测用药匹配实操
- 2026临沂中考试题及答案语文
- 2026监察官考试题库及答案
- 2026天津职业技术师范大学第五批招聘2人备考题库(其他专技岗位)及完整答案详解
- 2026广东中山市港口镇中南村招聘综合人员2人备考题库附答案详解
- 2026上海市大数据中心招聘10人备考题库含答案详解(完整版)
- 2025年脑机接口系统开发伦理委员会审查要点
- 2026新疆宏通建筑工程有限责任公司招聘7人备考题库带答案详解
- 2026年盐城市机关事业单位工勤人员技师选拔考试试卷及答案
- 高炉煤气干法精脱硫技术规范
- 天平使用步骤课件
- 高原铁路隧道供氧系统管道施工
- 2026年材料员之材料员基础知识考试题库300道附参考答案【考试直接用】
- 企业董事长助理岗位职责书
- 2025年宠物服务产业园区建设项目可行性研究报告及总结分析
- 校车驾驶员安全培训课件
- 民兵军事训练教案
- 2025年国家开放大学《人体解剖生理学》期末考试复习试题及答案解析
- 2026社区工作者考试必考题库及答案(考点梳理)
评论
0/150
提交评论