c++小学期大作业攻略(四)任务系统+站内信

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

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

一、任务系统

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、消息系统

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

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

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

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

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

原文地址:https://www.cnblogs.com/Enceladus/p/11268680.html