c++小学期大作业攻略(四)任务系统+站内信
虽然比最早的预定晚了整整一个星期但这核心功能最后一篇终于还是来了。
如果你已经经历了用户系统的洗礼,相信代码实现应该已经没有太大的难度,所以我们重点关注一下设计好的流程。
一、任务系统
首先是新建任务的窗口,把各类需要的输入框摆上去,然后调用一个添加任务的接口即可。

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

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

下方提供了一个按钮,希望加入该任务的用户可以发送参加任务的请求(这里出现了一个小bug,没有负责人应该显示Nobody的,但是因为0号用户强行设置为了System Message,忘记在这改了,小问题,不影响)
参加竞选的人可以写一小段说明,大概是说我为啥想加入你们这个项目之类的。

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

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

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

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

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

大致说一下代码结构。任务对象里面包含4种指针,分别指向该任务的发布者子任务,负责人子任务,译者子任务列表,候选人列表,每个子任务类记录它从属于哪个任务以及对应的是哪个用户。候选人就只记录了用户和竞选词。
每一类子任务里面有相应的成员函数进行操作,例如发布者子任务里就有修改任务信息,选择候选人的接口。
事实上任务类里面记录相应角色的用户是谁,然后将子任务的接口整合到大任务里面也没有区别,这里的子任务类有强行体现继承的意味(它要求里让实现这些类我有什么办法= =)。
在数据库中需要3张表,分别记录任务、候选人、翻译者。候选人和翻译者数据表都需要记录它是哪个用户,从属于哪个任务。也就是所有任务的翻译者都在一张表中。
二、消息系统
在刚才的例子中,我们可以看见所有的操作都会自动生成对话,例如报名成功,成为候选人,就会自动发送一条我想加入你的任务的信息给对方。

这个消息界面大约是全程序最难写也是响应最慢的页面实现方式是每一个对话信息都在左侧生成一个小用户框,在右侧生成一个对话页面,但是大部分对话页面都是隐藏掉的,单击左侧的头像或名字可以隐藏当前对话页面,显示新的对话页面。
具体来说每个用户使用一个消息列表,包含了与他有关联的所有消息。当一个信息产生时,就加入受影响的两个用户的消息列表。当用户登录时,从数据库加载所有跟他有关系的消息,当用户登出时,将其登录期间产生的新消息都放入数据库,事实上相当于每次有用的都只有当前用户的消息列表。
数据库中记录了该消息的发出者,接收者,内容和是否已读。关于已读的问题注意到用户登录期间除系统提示外不会产生以自己为接收者的信息,所以只需要记录该用户读过来自哪些用户的信息,登出时更新即可,反正按照设计只要它一打开跟这个用户的聊天框所有未读信息都被置为已读。
实在不知道该写些什么,泥萌有啥问题再来私戳我吧。
c++小学期大作业攻略(四)任务系统+站内信的更多相关文章
- c++小学期大作业攻略(一)环境配置
UPDATE at 2019/07/20 20:21 更新了Qt连接mysql的方法,但是是自己仿照连VS的方法摸索出来的,简单测试了一下能work但是不保证后期不会出问题.如果你在尝试过程中出现了任 ...
- c++小学期大作业攻略(二)整体思路+主界面
写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...
- c++小学期大作业攻略(五)基于QSS的样式美化
这回真的是最后一篇了. 前面说过,我们开发过程中暂时不搭理样式问题,等最后再一起处理,那么现在就是最后处理时刻了!看到网上说QSS跟CSS差不多,我还觉得自己可以干回老本行了,结果用起来发现,QSS是 ...
- c++小学期大作业攻略(三)用户系统
Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...
- c++小学期大作业攻略(零)建议+代码结构(持续更新)
当前已经做好的exe,数据库是连服务器的,但是头像是存在本地的文件系统里面: https://cloud.tsinghua.edu.cn/d/059ef6b1f9a149ce879b/files/?p ...
- 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略
早就听说了内连接与外连接,以前视图中使用过.这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践: 概念 关键字: 左右连接 数据表的连接有: 1.内连接(自然连接): 只有两 ...
- mac攻略(四) -- brew使用
1.介绍 brew是一个mac新用户需要了解的必备命令,它是mac下的软件包管理软件,类似centos下的yum.ubuntu下的apt-get,免去了自己手动编译安装的不方便. 很多时候作为一个用户 ...
- 小编接地气——第六届中国云计算大会攻略Q&A
2014年5月20-23日,第六届中国云计算大会在北京召开. 花个1000多元,在工作日请假来參加大会,不能让大家白跑一趟而是物有所值. 小编写了大会攻略Q&A,分享给各位 Q:为什么要參加关 ...
- 超时空英雄传说2复仇魔神完全攻略&秘技
╓─╥───────────────────────────────────────────────────╥─╖ ║ ║ 超 時 空 英 雄 傳 說 2 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...
随机推荐
- LinuxShell——特殊符号
LinuxShell——特殊符号 摘要:本文主要学习了Shell命令中具有特殊功能的一些符号. 多命令执行 顺序执行“;” 如果使用“;”连接多条命令,那么这些命令会依次执行,但是各命令之间没有任何逻 ...
- mac os catalina mongodb最新安装流程
1.brew安装 不推荐用brew,因为现在mongodb闭源了,brew里已经搜索不到mongodb,不过还是可以用brew安装的,这篇就不写了. 2.官网下载 直接去官网下载一个zip,解压完放到 ...
- 基于Proxy的小程序状态管理
摘要: 小程序状态管理. 作者:wwayne 原文:基于Proxy的小程序状态管理 Fundebug经授权转载,版权归原作者所有. 微信小程序的市场在进一步的扩大,而背后的技术社区仍在摸索着最好的实践 ...
- 转cocopods的使用
一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于 ...
- 13 个 NPM 快速开发技巧
摘要: 玩转npm. 作者:前端小智 原文:13 个 npm 快速开发技巧 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 每天,数以百万计的开发人员使用 n ...
- python基础-面向对象编程之反射
面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...
- Django Form 的主要内置字段介绍
修改 urls.py,添加 path('field.html', views.field), 在 templates 下创建 field.html, 内容如下: <!DOCTYPE html&g ...
- Lnmp搭建zabbix运维监控系统
使用目的? 在公司项目中需要做一个日志监控,最开始选择的是efk,但是efk的资料相对较少并且之前对这几个产品都没接触过,使用起来难度.于是选择了zabbix作为项目的运维监控系统. zabbix能做 ...
- SQL server 无法更新标识列
若是数据库设置了自增长字段,相应的Model也要做标记,否则修改数据的时候会提示无法更新条目 /// <summary> /// 自增长ID /// </summary> [D ...
- Python的爬虫利器之urllib
urllib包 urllib是一个包含几个模块来处理请求的库: - urllib.request发送http请求 - urllib.error处理请求过程中出现的异常 - urllib.pars ...