大学生交友平台 APP——YouQu

大学生交友平台 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

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

(2)软件安装概念图

IOS设备示意图

大学生交友平台 APP——YouQu_第2张图片
安卓设备安装示意图

大学生交友平台 APP——YouQu_第3张图片

(3)软件操作界面

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

大学生交友平台 APP——YouQu_第4张图片 含有登录、注册按钮。用户名和密码为空时会提示错误。

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

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

大学生交友平台 APP——YouQu_第6张图片发送按钮可以发送聊天内容。
Back按钮可以返回上一级界面。

2.2.硬件接口

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

2.3.软件接口

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

2.4.通信接口

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

3.软件代码

同样因为篇幅限制,这里仅仅展示部分的代码以及代码文件截图。

3.1. 软件前端代码

前端代码文件截图
大学生交友平台 APP——YouQu_第7张图片
其中 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.用户组以及好友推荐算法的实现

大学生交友平台 APP——YouQu_第8张图片
关于平台管理员这个用户类的功能的定义以及实现

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. 聊天文件储存的实现

大学生交友平台 APP——YouQu_第9张图片
其中 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小组
制作人名单(排名不分先后)

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

你可能感兴趣的:(需求工程)