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 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...
随机推荐
- C 内置函数
*) strcat()用于连接两个字符串 *) 函数 memcpy() 用来复制内存到另一个位置.
- Java生鲜电商平台-商品的spu和sku数据结构设计与架构
Java生鲜电商平台-商品的spu和sku数据结构设计与架构 1. 先说明几个概念. 电商网站采用在商品模块,常采用spu+sku的数据结构算法,这种算法可以将商品的属性和商品的基本信息分离,分开维护 ...
- 五分钟看懂UML类图与类的关系详解
在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Association).其中关联又分为 ...
- DOIS2019大会,腾讯 DevOps 测试中台探秘
WeTest 导读 腾讯WeTest受邀参加2019年DevOps 国际峰会,由WeTest产品负责人-殷柱伟老师分享了腾讯DevOps测试中台的实践经验与心得, 议题受到了现场听众及行业媒体的关注与 ...
- Nginx配置实验反向代理
l 实验要求 浏览器访问 8083.mine.com:8081 地址,(Nginx端口是8081)通过Nginx服务器反向代理监听请求,将请求转发到tomcat服务器上,实现真正内容的访问. l ...
- 解决IDEA springBoot读取*.properties文件中文内容乱码的问题
1. 配置 properties 文件 2. 读取 sex 属性输出到页面, 中文乱码 3. file --> settings 4. Editor --> File Encodings ...
- layer.js的一些常用的技巧
我们在一些弹出框或者其他的一些表单的样式逻辑当中会用到layer的组件,针对我遇到的问题做个小结 1.在使用checkbox进行多选的时候,默认的layer会有一个对勾的样式,但是我们通常在做单选或者 ...
- pikachu 文件包含,上传,下载
一.文件包含 1.File Inclusion(local) 我们先测试一下,选择kobe然后提交 发现url出现变化 可以猜测此功能为文件包含,包含的文件为 file1.php,所以我在此盘符的根目 ...
- python字符串连接的三种方法
1.+号连接 a="hello," b="world!" c=a+b print(c) 有一点需要注意的是,字符串类型是不可变的,所以每一次应用加号连接字符串都 ...
- 遍历hashmap 的四种方法
以下列出四种方法 public static void main(String[] args) { Map<String,String> map=new HashMap<String ...