面对面交友已经不能满足当代大学生的需求,网络交友品台为他们提供了一个实时的、易操作的交流互动的平台。 本项目致力于为大学生提供一个便捷的交友平台。有利于初入BIT的新同学快速掌握校内新鲜事、过往史。对于高年级同学可以在这里发现更多志同道合的朋友,一起聊理想、谈人生。依托于移动客户端,在本平台的用户可以随时随地自己的日常动态,让更多人了解自己,或者去了解更多的人。觉得朋友列表不够长,本平台可以为你推荐不同的圈子,娱乐圈、游戏圈、科技圈、艺术圈,找到和自己有共同兴趣的人。想成为校园达人,每周更新“引流”排行榜,轻松了解谁是BIT最靓的仔。 本平台在扩充交友方式之余,还有利于大学生摆脱“寝室宅”的生活,拒绝不出门,过上更加积极健康的、青春活力的大学生活。 实现了实时在线聊天、用户注册、聊天文件本地保存、用户组分类、好友推送算法等功能,旨在提供更好的用户体验。具体功能如下: 支持Android 4.0以上Android版本,仅限Android系统。 IOS设备示意图 含有登录、注册按钮。用户名和密码为空时会提示错误。 程序主界面,可以选择聊天房间加入或者创建 下方四个按钮分别是选择聊天室(当前页面)、好友推荐、排行榜与个人信息。 发送按钮可以发送聊天内容。 该APP支持一般的安卓模拟器与安卓系统的手机终端。 实现了管理员和用户操作的对接,聊天室提供了信息储存的接口。 利用了开源服务器实现,通过TCP协议传输。 前端代码文件截图 关于好友推荐算法的部分代码展示 该软件属于北京理工大学2018级软件工程专业UML课程第11小组大学生交友平台 APP——YouQu
YouQu(友趣)
1.软件简介
1.1.软件设计理念
1.2.软件实现功能
1.3.软件运行环境
2.外部接口需求
2.1.用户界面设计
(1)APP ICON
YouQi APP icon 设计理念
蓝色是我们的主题色,使界面看起来较为清爽,也使用户感到放松和沉静。鲸鱼图案的设计与蓝色的主色调相结合,偏卡通简笔的风格使得图标看起来轻松可爱,且鲸鱼又体现了友好善意的交友理念。
鲸鱼的灵感来源于孤独鲸,具有52赫兹频率的鲸鱼终其一生都在寻找自己的同类,但往往无果而终。而这款交友app目的在于帮助朋友们找到自己的同伴,共同交流沟通,让生活积极向上。(2)软件安装概念图
安卓设备安装示意图(3)软件操作界面
因为篇幅限制,这里仅仅展示局部的界面。
软件登陆界面,实现了账号的登陆以及注册功能。
“加入或创建房间”按钮可以加入当前房间列表中的房间或新建一个房间。
聊天室主界面,该界面可以查看该房间的实时人数以及历史消息记录。
Back按钮可以返回上一级界面。2.2.硬件接口
2.3.软件接口
2.4.通信接口
3.软件代码
同样因为篇幅限制,这里仅仅展示部分的代码以及代码文件截图。3.1. 软件前端代码
其中 Launcher.cs 文件的代码展示:// An highlighted block using System.Collections; using System.Collections.Generic; using UnityEngine; using Photon.Realtime; using Photon.Pun; using UnityEngine.UI; public class Launcher : MonoBehaviourPunCallbacks { public GameObject canvas;//加入键画布 public GameObject canvas2;//进入界面画布 public GameObject a;//聊天文本框 public GameObject b;//任务管理器,负责统计房间人数 public Text c;//聊天文本 public int current;//当前人数暂存 public bool action = false;//是否更新当前人数 public Button exit;//退出聊天室,返回到开始界面 void Start() { canvas2.SetActive(true);//打开进入界面画布 exit.onClick.AddListener(leavecurrent);//为退出按键增加监听 } //当进入房间时调用 public override void OnJoinedRoom() { base.OnJoinedRoom(); } //当退出房间时调用 public override void OnLeftRoom() { base.OnLeftRoom(); } //加入函数,生成用户,进入聊天室 public void join() { addto();//将聊天室人数增加1 //放置玩家 if (b.GetComponent<Count>().countofperson == 1) Place1(); else if (b.GetComponent<Count>().countofperson == 2) Place2(); else if (b.GetComponent<Count>().countofperson == 3) Place3(); else Place4(); } //增加聊天室人数函数 [PunRPC] public void add() { b.GetComponent<Count>().countofperson++; current = b.GetComponent<Count>().countofperson; action = true; } public void addto() { PhotonView photonView = PhotonView.Get(this); photonView.RPC("add", RpcTarget.All); } //减少聊天室人数函数 [PunRPC] public void cut() { b.GetComponent<Count>().countofperson--; current = b.GetComponent<Count>().countofperson; } public void cutto() { PhotonView photonView = PhotonView.Get(this); photonView.RPC("cut", RpcTarget.All); } //关闭界面画布 public void Clean() { canvas.SetActive(false); } //在指定位置生成用户 public void Place1() { init(); GameObject temp= PhotonNetwork.Instantiate("Player", new Vector3(-7, 4, 0), Quaternion.identity, 0); temp.GetComponent<MyPlayer>().mytext.text = PhotonNetwork.NickName; } public void Place2() { init(); GameObject temp = PhotonNetwork.Instantiate("Player", new Vector3(7, 4, 0), Quaternion.identity, 0); temp.GetComponent<MyPlayer>().mytext.text = PhotonNetwork.NickName; } public void Place3() { init(); GameObject temp = PhotonNetwork.Instantiate("Player", new Vector3(-7, 0, 0), Quaternion.identity, 0); temp.GetComponent<MyPlayer>().mytext.text = PhotonNetwork.NickName; } public void Place4() { init(); GameObject temp = PhotonNetwork.Instantiate("Player", new Vector3(7, 0, 0), Quaternion.identity, 0); temp.GetComponent<MyPlayer>().mytext.text = PhotonNetwork.NickName; } //初始化函数 public void init() { // Clean(); canvas2.SetActive(false); GameManager t = b.GetComponent<GameManager>(); t.target = c; Player1 op = a.GetComponent<Player1>(); op.target = t; Instantiate(a, new Vector3(0,(float)-2.7, 0), Quaternion.identity); } //实时更新用户数量 [PunRPC] public void refresh(int tempint) { b.GetComponent<Count>().countofperson =tempint; } public void reset(int tempint) { PhotonView photonView = PhotonView.Get(this); photonView.RPC("refresh", RpcTarget.All,tempint); } //离开函数 public void leavecurrent() { PhotonNetwork.LeaveRoom(); cutto(); reset(current); PhotonNetwork.LoadLevel("Start"); } //每帧进行一次用户数更新 void Update() { if(action) reset(current); } };
3.2.软件后端代码
3.2.1.用户组以及好友推荐算法的实现
关于平台管理员这个用户类的功能的定义以及实现public class Manager_Class extends User_Class{ Manager_Class(String name, String key, int Id, int MoblieType) { super(name, key, Id, MoblieType); } //删除用户的信息 private void DeleteUserData(String Username) { try{ Free(Username); }catch (Exception Username) { System.out.println("删除用户失败"); } System.out.println("删除用户成功"); } /* * 发起活动 * 根据当前服务器时间来随机生产活动序号 */ private void AddActivity() { try{ int ActivityId; ActivityId = random(++seeduniquifier + system.nanotime()); CreateActivity(ActivityId); }catch (Exception TimeWrong) { System.out.println("无法获取服务器信息,创建失败"); } System.out.println("创建活动成功"); } /* * 删除活动 * 根据当前活动序号来删除 */ private void DeleteActivity(int ActivityId) { try{ Delecte(ActivityId); }catch (Exception ActivityNotFound) { System.out.println("该活动不存在"); } System.out.println("删除活动成功"); } //暂时冻结账号 private void FreezeUser(int UserId,int day) { try { Freeze(UserId,day); }catch(Exception UserID) { System.out.println("用户不存在"); } System.out.println("成功冻结用户"+UserId+" "+day+"天"); } //解封账号 private void UnsealedUser(int UserId) { try { Unseal(UserId); }catch (Exception UserId) { System.out.println("找不到该用户或该用户未被冻结"); } System.out.println("解冻成功"); }
import java.util.List; public class FIND { public class Score { //A和B的所有好友数 private int Union; //A和B的共同好友数 private int Intersection; //A和B的共同好友列表 private List<Character> l; //此对象是A和B之间的关系 private char A; private char B; //没加权重的得分 private float score; //对每个共同好友加权重的得分 private double wscore; public double getWscore() { return wscore; } public void setWscore(double wscore) { this.wscore = wscore; } public float getScore() { return score; } public char getA() { return A; } public void setA(char a) { A = a; } public char getB() { return B; } public void setB(char b) { B = b; } public int getUnion() { return Union; } public void setUnion(int union) { Union = union; if(Union!=0){ score=(float) Intersection/Union; } } public int getIntersection() { return Intersection; } public void setIntersection(int intersection) { Intersection = intersection; if(Union!=0){ score=(float) Intersection/Union; } } public List getL() { return l; } public void setL(List l) { this.l = l; } public String toString() { return "Score{" + "Union=" + Union + ", Intersection=" + Intersection + ", l=" + l + ", A=" + A + ", B=" + B + ", score=" + score + ", wscore="+wscore+ '}'; } }
3.2.2. 聊天文件储存的实现
其中 record_f.cpp 的代码展示#include "record.h" #include <iostream> using namespace std; Record::Record(string &user, string &cont) { time_t now = time(0); struct tm *pt = localtime(&now); char t[80]; strftime(t, 80, "%Y-%m-%d %H:%M:%S", pt); all.append(t); all.push_back(' '); all.append("From "); all.append(user); all.append(", "); all.append("Content : "); all.append(cont); } Record::~Record(){} RList::RList(string &name){ file.open(name.c_str(), ios_base::in | ios_base::app); } RList::~RList() { file.close(); } bool RList::display(vector<string> &content) { char str[100]; while (file.getline(str, 100, 'n')) { string line(str); content.push_back(line); } return true; } bool RList::append(Record &newr) { file << newr.all << endl; return true; }
4.对最初设计的一些更改
最初
最终
注册时实现对学号和姓名的双重认证
仅实现了对学号合法性的判断
朋友圈功能的实现
仅完成了对签名的变更
较为复杂的排行榜算法
仅完成了基础的排行榜算法
5.最后鸣谢
制作人名单(排名不分先后)
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算