虽然比最早的预定晚了整整一个星期但这核心功能最后一篇终于还是来了。

  如果你已经经历了用户系统的洗礼,相信代码实现应该已经没有太大的难度,所以我们重点关注一下设计好的流程。

一、任务系统

  首先是新建任务的窗口,把各类需要的输入框摆上去,然后调用一个添加任务的接口即可。

  新建成功,跳转至任务列表页面,好像也叫任务大厅? 

  单击任务即可进入任务详情页面

  下方提供了一个按钮,希望加入该任务的用户可以发送参加任务的请求(这里出现了一个小bug,没有负责人应该显示Nobody的,但是因为0号用户强行设置为了System Message,忘记在这改了,小问题,不影响)

  参加竞选的人可以写一小段说明,大概是说我为啥想加入你们这个项目之类的。

  对于发起人的任务详情页,增加了两个标签页,一个可以用来维护任务的主要信息,如更改任务描述,修改DDL,追加金额等,一个可以查看已报名成为负责人的人,可以Accept或者Refuse,Accept之后任务直接进入招募翻译者的状态。如果到DDL了没人报名则任务失败,否则自动选取最早报名的人成为负责人。

  负责人的任务详情界面多出来三个标签页,分别是从候选人里挑翻译者,管理翻译者,提交最终译文给发布者。

  管理翻译者的部分又分为两个标签页,分别是给该翻译者分配任务,以及查看其提交的译文并给出评论。分配任务我是用两个整数记录该翻译者负责的是原文的哪个区间段,并且提供了一个小工具,负责人只需将光标移动到相应位置上按下change就可以自动生成光标的位置。

  翻译者只有一个工作页面,可以对照自己需要翻译的原文输入相应译文,同时下方会显示来自负责人的评论信息。

  翻译者提交译文后,负责人可以直接生成将所有译文直接拼接得到的总译文,可以进行修改,最终提交给发布者。

  发布者可以在管理页看到当前已经提交的译文,如果觉得ok可以将任务设置为完成状态,任务一旦进入完成状态,其他人能看见的就只有任务信息概要,只有发布者多出来一个查看原文和最终译文的窗口。

  大致说一下代码结构。任务对象里面包含4种指针,分别指向该任务的发布者子任务,负责人子任务,译者子任务列表,候选人列表,每个子任务类记录它从属于哪个任务以及对应的是哪个用户。候选人就只记录了用户和竞选词。

  每一类子任务里面有相应的成员函数进行操作,例如发布者子任务里就有修改任务信息,选择候选人的接口。

  事实上任务类里面记录相应角色的用户是谁,然后将子任务的接口整合到大任务里面也没有区别,这里的子任务类有强行体现继承的意味(它要求里让实现这些类我有什么办法= =)。

  在数据库中需要3张表,分别记录任务、候选人、翻译者。候选人和翻译者数据表都需要记录它是哪个用户,从属于哪个任务。也就是所有任务的翻译者都在一张表中。

二、消息系统

  在刚才的例子中,我们可以看见所有的操作都会自动生成对话,例如报名成功,成为候选人,就会自动发送一条我想加入你的任务的信息给对方。

  这个消息界面大约是全程序最难写也是响应最慢的页面实现方式是每一个对话信息都在左侧生成一个小用户框,在右侧生成一个对话页面,但是大部分对话页面都是隐藏掉的,单击左侧的头像或名字可以隐藏当前对话页面,显示新的对话页面。

  具体来说每个用户使用一个消息列表,包含了与他有关联的所有消息。当一个信息产生时,就加入受影响的两个用户的消息列表。当用户登录时,从数据库加载所有跟他有关系的消息,当用户登出时,将其登录期间产生的新消息都放入数据库,事实上相当于每次有用的都只有当前用户的消息列表。

  数据库中记录了该消息的发出者,接收者,内容和是否已读。关于已读的问题注意到用户登录期间除系统提示外不会产生以自己为接收者的信息,所以只需要记录该用户读过来自哪些用户的信息,登出时更新即可,反正按照设计只要它一打开跟这个用户的聊天框所有未读信息都被置为已读。

  实在不知道该写些什么,泥萌有啥问题再来私戳我吧。

c++小学期大作业攻略(四)任务系统+站内信的更多相关文章

  1. c++小学期大作业攻略(一)环境配置

    UPDATE at 2019/07/20 20:21 更新了Qt连接mysql的方法,但是是自己仿照连VS的方法摸索出来的,简单测试了一下能work但是不保证后期不会出问题.如果你在尝试过程中出现了任 ...

  2. c++小学期大作业攻略(二)整体思路+主界面

    写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...

  3. c++小学期大作业攻略(五)基于QSS的样式美化

    这回真的是最后一篇了. 前面说过,我们开发过程中暂时不搭理样式问题,等最后再一起处理,那么现在就是最后处理时刻了!看到网上说QSS跟CSS差不多,我还觉得自己可以干回老本行了,结果用起来发现,QSS是 ...

  4. c++小学期大作业攻略(三)用户系统

    Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...

  5. c++小学期大作业攻略(零)建议+代码结构(持续更新)

    当前已经做好的exe,数据库是连服务器的,但是头像是存在本地的文件系统里面: https://cloud.tsinghua.edu.cn/d/059ef6b1f9a149ce879b/files/?p ...

  6. 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略

    早就听说了内连接与外连接,以前视图中使用过.这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践: 概念 关键字: 左右连接 数据表的连接有: 1.内连接(自然连接): 只有两 ...

  7. mac攻略(四) -- brew使用

    1.介绍 brew是一个mac新用户需要了解的必备命令,它是mac下的软件包管理软件,类似centos下的yum.ubuntu下的apt-get,免去了自己手动编译安装的不方便. 很多时候作为一个用户 ...

  8. 小编接地气——第六届中国云计算大会攻略Q&A

    2014年5月20-23日,第六届中国云计算大会在北京召开. 花个1000多元,在工作日请假来參加大会,不能让大家白跑一趟而是物有所值. 小编写了大会攻略Q&A,分享给各位 Q:为什么要參加关 ...

  9. 超时空英雄传说2复仇魔神完全攻略&秘技

    ╓─╥───────────────────────────────────────────────────╥─╖ ║ ║ 超 時 空 英 雄 傳 說 2 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...

随机推荐

  1. img error 图片加载失败的最佳方案

    有时候, 当img的src加载失败, 会显示缺省碎片图片,  影响用户体验.  有一个js事件onerror就派上了用场. 它可以在加载失败时, 显示缺省的图片. 它有两种使用方式. 第一种: 使用纯 ...

  2. Kafka Network层解析,还是有人把它说清楚了

    我们知道kafka是基于TCP连接的.其并没有像很多中间件使用netty作为TCP服务器.而是自己基于Java NIO写了一套. 几个重要类 先看下Kafka Client的网络层架构. 本文主要分析 ...

  3. B+树的算法(java实现)

    定义 一颗m阶B+树满足以下几个条件: 1.除根节点外的节点的关键字个数最大为m-1,最小为m/2 2.除叶节点外的每个节点的孩子节点的数目为该节点关键字个数加一,这些孩子节点的的关键字的范围与父节点 ...

  4. ConstraintLayout 用法

    当前描述是基于constraint-layout:1.1.2. 一.前言 在以前,android是使用布局如LinearLayout .RelativeLayout等来构建页面,但这些布局使用起来很麻 ...

  5. django更换ORM连接处理(连接池)转

    1 概述 在使用 Django 进行 Web 开发时, 我们避免不了与数据库打交道. 当并发量低的时候, 不会有任何问题. 但一旦并发量达到一定数量, 就会导致 数据库的连接数会被瞬时占满. 这将导致 ...

  6. 凯哥带你用python撸算法之雪花算法

    import time class Snow(object): def __init__(self, idx=None): init_date = time.strptime('2010-01-01 ...

  7. Android APP之WebView如何校验SSL证书

    Android系统的碎片化很严重,并且手机日期不正确.手机根证书异常.com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点. ...

  8. [Go] golang设置运行的cpu数

    package main import( "fmt" "runtime" ) func main() { cpuNum:=runtime.NumCPU() fm ...

  9. mysql系列3 SQL语法基础

    1.创建数据库(语法) 2.创建(数据库)表(语法) 复制新的空表举个例子: mysql> use course;Reading table information for completion ...

  10. JAVAWEB复习day01

    一.基础知识 1.一个html文件开始和结束的标签<html></html> 2.html的两部分<head>设置相关信息</head>,<bod ...