分布式数据库课程设计题目基于MongoDB的QQ空间模拟实现学生姓名刘家宇学生学号***********专业班级计科一班指导老师王永恒完成日期 2015年1月15日一、设计目的QQ空间是现在大家经常使用的社交平台。
在QQ空间上可以自己发表说说,查看其他人的说说,也可以给其他人的留言板上留言。
这些功能都丰富了我们的社交生活,因此本次用JAVA连接Mongodb来实现一个简单的QQ空间模拟实现。
二、编写环境Eclipse+Mongodb三、环境配置首先要运行MongoDB服务器,然后通过在eclipse里添加MongoDB的jar包来获取关于MongoDB的java方法,然后用这些方法来启动和操作MongoDB服务器。
在MongoDB官网“/downloads”下载MongoDB服务器应用包,将里面的exe文件放到一个自己设置的MongoDB文件夹中,如“F:\MongoDB”打开CMD,在刚刚的创建文件夹的目录下,输入指令“mongod–dbpath “F:\MongoDB\data””如下图所示MongoDB服务器连接设置成功:四、设计实现1、数据库设计Mongo数据库的设计创建一个名为:soial的Mongo数据库,然后创建一些数据集合①用户数据集合(userInfo):含有用户名(name)、用户密码(pwd)、用户地址(address)、用户出生年月日(year、month、day)、用户证件号(id)和是否处于登陆状态(status)这些属性②个人好友数据集合(userFriend):含有好友名(friend)和个人用户名(name)属性。
③留言板数据集合(userMassage):含有留言内容(massage)、留言人名(recipient)和对谁留言(sender)的属性④说说数据集合(userSaySay):说说内容(massage)和个人用户名(name)属性。
等等2、功能设计用户登录代码public class RegisterMonitor implements ActionListener{ private RegisterFrame rf; //用于注册界面private boolean juge_success = true; //用于判断登录是否成功private boolean juge_null = true; //用来判断用户名和密码是否为空public RegisterMonitor(RegisterFrame rf){this.rf = rf;}public void actionPerformed(ActionEvent e) {if(("返回").equals(e.getActionCommand())){//用于关闭注册界面rf.dispose();//用于实例化登陆界面LoginFrame lf = new LoginFrame();//用于显示登陆界面lf.showFrame();}else if(("完成注册").equals(e.getActionCommand())){ String str = "";//用于判断用户名是否为空if(("").equals(rf.jtf_user_name.getText())){juge_null = false;}//如果不为空else{//进而判断密码是否为空if(("").equals(rf.jtf_user_pwd.getText())){juge_null = false;}}//如果都不为空,再判断是否有重复用户名if(juge_null){//从Mongodb中获得名为userInfo的数据集合,如果该数据集合不存在,Mongodb会为其新建立DBCollection userInfo =OpenDatabase.db.getCollection("userInfo");// 创建要查询的userBasicDBObject searchQuery = new BasicDBObject();//获取该用户名str = rf.jtf_user_name.getText();searchQuery.put("name", str);// 使用userInfo的find方法查找userDBCursor cursor = userInfo.find(searchQuery);//若存在,则不能创建while (cursor.hasNext()) {juge_success = false;cursor.next();}//判断该用户名是否存在if(juge_success){// 使用BasicDBObject对象创建一个mongodb的user,并给予赋值。
BasicDBObject user = new BasicDBObject();str = rf.jtf_user_name.getText();user.put("name", str);str = rf.jtf_user_pwd.getText();user.put("pwd", str);str = rf.jtf_user_address.getText();user.put("address", str);str = rf.jtf_user_id.getText();user.put("id", str);str = rf.jtf_user_year.getText();user.put("year", str);str = rf.jtf_user_month.getText();user.put("month", str);str = rf.jtf_user_day.getText();user.put("day", str);//用于添加一个状态值,判断是否是当前用户登陆user.put("status",0);//用于将新建立的user保存到userInfo中去userInfo.insert(user);JOptionPane.showMessageDialog(null, "注册成功");//用于关闭注册界面rf.dispose();//用于实例化登陆界面LoginFrame lf = new LoginFrame();//用于显示登陆界面lf.showFrame();}else{JOptionPane.showMessageDialog(null, "注册失败,用户名重复");}System.out.println("Done");}else{JOptionPane.showMessageDialog(null, "用户名或者密码不能为空");}juge_null = true;juge_success = true;}}}好友添加代码:public class AddFriendMonitor implements ActionListener{private AddFriendFrame aff; //用于添加好友界面private boolean juge_add = false; //用于判断是否可以添加private boolean juge_simple = false; //用于判断输入的是否跟为当前登陆用户public AddFriendMonitor(AddFriendFrame aff) {this.aff = aff;}public void actionPerformed(ActionEvent e) {if(("添加").equals(e.getActionCommand())){String str = "";//用于获取输入框的内容str = aff.jta_name.getText();//用于判断是否为当前用户if((er_name).equals(str)){juge_simple = true;}//如果是,则添加失败if(juge_simple){JOptionPane.showMessageDialog(null, "不能添加用户自己本身");}//如果不是else{//转而从Mongodb中获得名为userInfo的数据集合,若该数据集合不存在,Mongodb会为其新建立DBCollection userInfo =OpenDatabase.db.getCollection("userInfo");//用于从Mongodb中获得名为userFriend的数据集合,如果该数据集合不存在,Mongodb会为其新建立DBCollection userFriend =OpenDatabase.db.getCollection("userFriend");// 用于创建要查询的userBasicDBObject searchQuery = new BasicDBObject();searchQuery.put("name", str);DBCursor cursor = userInfo.find(searchQuery)while (cursor.hasNext()) {juge_add = true;cursor.next();}// 创建要查询的friendBasicDBObject friendQuery = new BasicDBObject();friendQuery.put("name", er_name);friendQuery.put("friend", str);cursor = userFriend.find(friendQuery);//如果存在,则添加失败while (cursor.hasNext()) {juge_add = false;cursor.next();}//用于判断是否可以添加if(juge_add){JOptionPane.showMessageDialog(null, "添加成功");// 用于创建要添加的好友BasicDBObject friend = new BasicDBObject();friend.put("name", er_name);friend.put("friend",str);//用于将新建立的friend保存到userFriend中去userFriend.insert(friend);aff.dispose();}else{JOptionPane.showMessageDialog(null, "该用户不存在或已经是你好友");}}juge_simple = false;juge_add = false;}}}查看好友代号public class FriendMonitor implements ActionListener{ private FriendFrame ff;public FriendMonitor(FriendFrame ff) {this.ff = ff;}public void actionPerformed(ActionEvent e) {if(("说说").equals(e.getActionCommand())){ff.showSaySay();}else if(("日志").equals(e.getActionCommand())){}else if(("留言板").equals(e.getActionCommand())){ ff.showMessage();}else if(("音乐").equals(e.getActionCommand())){}else if(("相册").equals(e.getActionCommand())){}else if(("发送").equals(e.getActionCommand())){//用于获取要发送的信息String str_msg = ff.jta_message.getText();//用于从Mongodb中获得名为userMessage的数据集合,如果该数据集合不存在,Mongodb会为其新建立DBCollection userMessage =OpenDatabase.db.getCollection("userMessage");// 用于创建要添加的说说BasicDBObject searchQuery = new BasicDBObject();searchQuery.put("sender", er_name);searchQuery.put("recipient",er_name);searchQuery.put("massage", str_msg);//用于添加进数据集合userMessage.insert(searchQuery);//用于刷新说说ff.showMessage();}}}查看主页代码public class MainMonitor implements ActionListener{ private MainFrame mf;/*** 构造方法,用来传入参数* @param mf 主界面*/public MainMonitor(MainFrame mf) {this.mf = mf;}public void actionPerformed(ActionEvent e) {if(("查看好友").equals(e.getActionCommand())){//用于实例化查看好友界面LookFriendFrame lff = new LookFriendFrame();//用于显示界面lff.showFrame();}else if(("添加好友").equals(e.getActionCommand())){ //用于实例化添加好友界面AddFriendFrame aff = new AddFriendFrame();//用于显示界面aff.showFrame();}else if(("说说").equals(e.getActionCommand())){mf.showSaySay();}else if(("日志").equals(e.getActionCommand())){}else if(("留言板").equals(e.getActionCommand())){mf.showMessage();}else if(("发送").equals(e.getActionCommand())){//获取要发送的信息String str_msg = mf.jta_saysay.getText();//从Mongodb中获得名为userSaySay的数据集合,如果该数据集合不存在,Mongodb会为其新建立OpenDatabase.db.getCollection("userSaySay");// 创建要添加的说说BasicDBObject searchQuery = new BasicDBObject();searchQuery.put("name", er_name);searchQuery.put("massage", str_msg);//添加进数据集合userSaySay.insert(searchQuery);//刷新说说mf.showSaySay();}else if(("返回登陆").equals(e.getActionCommand())){//获取点击的是确定还是取消int i = JOptionPane.showConfirmDialog(null,"是否要登出","",JOptionPane.YES_NO_OPTION);//若点击的是确定,则删除该好友if(i == 0){JOptionPane.showMessageDialog(null, "登出成功");//关闭主界面mf.dispose();//从Mongodb中获得名为userInfo的数据集合,如果该数据集合不存在,Mongodb会为其新建立OpenDatabase.db.getCollection("userInfo");//更新用户数据,把用户状态改为登陆状态BasicDBObject newDocument3 =newBasicDBObject().append("$set",new BasicDBObject().append("status",0));userInfo.update(new BasicDBObject().append("name", er_name),newDocument3);//实例化登陆界面LoginFrame lf = new LoginFrame();//显示界面lf.showFrame();}}}}。