大学生交友平台 APP——YouQu

  • YouQu(友趣)
    • 1.软件简介
      • 1.1.软件设计理念
      • 1.2.软件实现功能
      • 1.3.软件运行环境
    • 2.外部接口需求
      • 2.1.用户界面设计
        • (1)APP ICON
        • (2)软件安装概念图
        • (3)软件操作界面
      • 2.2.硬件接口
      • 2.3.软件接口
      • 2.4.通信接口
    • 3.软件代码
      • 3.1. 软件前端代码
      • 3.2.软件后端代码
        • 3.2.1.用户组以及好友推荐算法的实现
        • 3.2.2. 聊天文件储存的实现
    • 4.对最初设计的一些更改
    • 5.最后鸣谢

YouQu(友趣)

1.软件简介

1.1.软件设计理念

面对面交友已经不能满足当代大学生的需求,网络交友品台为他们提供了一个实时的、易操作的交流互动的平台。

本项目致力于为大学生提供一个便捷的交友平台。有利于初入BIT的新同学快速掌握校内新鲜事、过往史。对于高年级同学可以在这里发现更多志同道合的朋友,一起聊理想、谈人生。依托于移动客户端,在本平台的用户可以随时随地分享自己的日常动态,让更多人了解自己,或者去了解更多的人。觉得朋友列表不够长,本平台可以为你推荐不同的圈子,娱乐圈、游戏圈、科技圈、艺术圈,找到和自己有共同兴趣的人。想成为校园达人,每周更新“引流”排行榜,轻松了解谁是BIT最靓的仔。

本平台在扩充交友方式之余,还有利于大学生摆脱“寝室宅”的生活,拒绝不出门,过上更加积极健康的、青春活力的大学生活。

1.2.软件实现功能

实现了实时在线聊天、用户注册、聊天文件本地保存、用户组分类、好友推送算法等功能,旨在提供更好的用户体验。具体功能如下:

  1. 注册与登录:使用学号进行注册。
  2. 个人信息查看与修改:可以修改昵称、账号密码等。
  3. 通用设置:音乐、音效、通知推送、好友推荐等的开启与否。
  4. 热度排行:依据发言次数、流量贡献率、社区活跃度评选校园热点达人,成为达人可以被优先推荐。
  5. 聊天室:可以创建房间,并通过网络与他人实时聊天并统计在线人数。
  6. 聊天记录的保存:可以将聊天记录保存到本地。
  7. 好友推荐:通过计算好友喜好程度相关值,来获得最接近用户喜好的用户数据,从而进行推送。

1.3.软件运行环境

支持Android 4.0以上Android版本,仅限Android系统。

2.外部接口需求

2.1.用户界面设计

(1)APP ICON


YouQi APP icon 设计理念
        蓝色是我们的主题色,使界面看起来较为清爽,也使用户感到放松和沉静。鲸鱼图案的设计与蓝色的主色调相结合,偏卡通简笔的风格使得图标看起来轻松可爱,且鲸鱼又体现了友好善意的交友理念。
        鲸鱼的灵感来源于孤独鲸,具有52赫兹频率的鲸鱼终其一生都在寻找自己的同类,但往往无果而终。而这款交友app目的在于帮助朋友们找到自己的同伴,共同交流沟通,让生活积极向上。

(2)软件安装概念图

IOS设备示意图


安卓设备安装示意图

(3)软件操作界面

因为篇幅限制,这里仅仅展示局部的界面。
软件登陆界面,实现了账号的登陆以及注册功能。

含有登录、注册按钮。用户名和密码为空时会提示错误。

程序主界面,可以选择聊天房间加入或者创建

下方四个按钮分别是选择聊天室(当前页面)、好友推荐、排行榜与个人信息。
“加入或创建房间”按钮可以加入当前房间列表中的房间或新建一个房间。
聊天室主界面,该界面可以查看该房间的实时人数以及历史消息记录。

发送按钮可以发送聊天内容。
Back按钮可以返回上一级界面。

2.2.硬件接口

该APP支持一般的安卓模拟器与安卓系统的手机终端。

2.3.软件接口

实现了管理员和用户操作的对接,聊天室提供了信息储存的接口。

2.4.通信接口

利用了开源服务器实现,通过TCP协议传输。

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.最后鸣谢

该软件属于北京理工大学2018级软件工程专业UML课程第11小组
制作人名单(排名不分先后)

  • 李灌桦
  • 季旭
  • 邢宏波
  • 应淞斐
  • 姚智棣

大学生交友平台 APP——YouQu相关推荐

  1. 大学生交友平台——项目启动篇

    目录 一. 项目前景及范围 1.1 项目背景 1.2 项目前景 1.3 用户范围 1.4 功能概述 二.问卷结果及硬数据分析 2.1. 问卷制作 2.2. 数据整理.图表分析 2.3. 基于问卷的需求 ...

  2. 大学生交友平台——结构化需求分析与建模

    目录 一. 结构化需求分析概述 1.1 功能分解图 1.2 需求细化与优先级划分 1.2.1 需求细化 1.2.2 优先级划分 二. 过程建模 2.1 DFD图 2.1.1 DFD - 上下文图 2. ...

  3. java毕业设计大学生学习交友平台Mybatis+系统+数据库+调试部署

    java毕业设计大学生学习交友平台Mybatis+系统+数据库+调试部署 java毕业设计大学生学习交友平台Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  4. [附源码]Java计算机毕业设计SSM大学生学习交友平台

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. (附源码)计算机毕业设计ssm大学生学习交友平台

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  6. 计算机毕业设计SSM大学生学习交友平台【附源码数据库】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  7. 安卓AndroidStudio大学生交友聊天社交app设计

    开发软件:Eclipse/Idea + AndroidStudio/Eclipse + Mysql 这是一个基于安卓的大学生交友社交论坛app,一共3个身份,包括老师.学生和管理员,其中老师和学生在手 ...

  8. 计算机毕业设计Java大学生兼职平台(源码+系统+mysql数据库+lw文档

    计算机毕业设计Java大学生兼职平台(源码+系统+mysql数据库+lw文档 计算机毕业设计Java大学生兼职平台(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开发 ...

  9. java计算机毕业设计员工婚恋交友平台源码+数据库+系统+lw文档+部署

    java计算机毕业设计员工婚恋交友平台源码+数据库+系统+lw文档+部署 java计算机毕业设计员工婚恋交友平台源码+数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

最新文章

  1. 深度学习调用TensorFlow、PyTorch等框架
  2. MIT警告深度学习正在逼近计算极限,网友:放缓不失为一件好事
  3. ICRA 2020 | 实时语义立体匹配
  4. VMware Workstation 9下基于Ubuntu 12.10服务器版本的Hadoop集群的配置
  5. python2018上海脱产_python接口自动化27-urlencode编码%E6%82%A0%E6%82%A0与解码
  6. 上传图片---SpringMVC学习笔记(十一)
  7. 【Django】Django web项目部署(Nginx+uwsgi)
  8. C# WPF图表控件之ChartControl用法指南①
  9. java break和return的区别_【java】break,continue和return区别
  10. 推荐几个Vue开发必备插件,要收藏
  11. jvm原理、启动时间、与编译器操作系统关系
  12. python ljust函数,Python 字符串左对齐-Python 指定字符串左对齐-python ljust() 函数-python ljust() 函数用法-嗨客网...
  13. java怎么跳出下列,在JAVA中,如何跳出当前的多重嵌套循环?
  14. 2017美赛C题论文学习笔记
  15. 酷狗显示服务器失败怎么回事,酷狗音乐上传音乐失败怎么回事
  16. 右下角任务栏弹出天猫广告的解决办法,搞了半天原来是搜狗拼音在捣鬼!附搜狗双拼党转投微软拼音怀抱教程
  17. 【学习记录】SLAM线特征基础:LSD算法、LBD描述子、普朗克坐标、EDLines算法
  18. 详解OpenStack常见模块
  19. JavaScript数组forEach方法
  20. 域名whois查询违规吗_WHOIS域ID隐私保护如何工作? 我需要域名WHOIS隐私吗?

热门文章

  1. 233网校题库计算机二级c语言,计算机二级真题(233网校计算机二级题库)
  2. 前端实现克里金插值分析(二)
  3. 上采样、下采样区别及作用
  4. 考研高数背诵类知识点-张宇(不定期更新)
  5. PyGame 英文打字游戏
  6. 如何快速开发出一个高质量的APP
  7. 用p5.js实现动态形状笔刷
  8. 区块链架构--fabric基本介绍
  9. SGD,Adagrad,Adadelta,Adam等优化方法总结和比较
  10. 万事俱备,只欠价格? — 华为 MateBook 13 长测