# 使用说明
> 以下内容如未作特殊说明,均为第三版(网络版)的操作说明,对于第三版尚不支持的功能,会在说明中标注。
## 初始配置
C++学习论坛(高级版)的用户数据和帖子数据分别储存在`userdata`和`postdata`文件中,且已在压缩包中给出,需放在程序根目录使用。程序第一次运行且没有发现数据文件时会视为建立全新的论坛系统,程序会默认给定管理员账号和密码,用户可以通过管理员账户登陆后添加用户、添加版块完成论坛的初始化。也可以使用给定的数据覆盖程序自动生成的原文件实现数据的恢复。
C++学习论坛(网络版)分为`服务端`和`客户端`两部分,其中`客户端`无需配置,可以直接双击运行,并支持多用户登陆;`服务端`需要在根目录放入存有用户数据和帖子数据的`userdata`和`postdata`,正确保存后即可双击运行启动。
需要注意的是,网络版系统暂时不支持管理员功能,因此初始化的空论坛无法直接使用(无法管理用户、版块),请先导入两个数据文件后再进行使用。
## 功能说明
### 客户端功能
#### 登陆界面
![login](https://s2.ax1x.com/2020/03/06/3L0ort.jpg)
* 用户通过输入管理员分配的账号即可登陆系统,系统会根据用户的名字自动识别用户的身份,进入到不同的主界面模式。系统初始给定了如下几个用户:
| 身份|用户名|密码|
|:--:|:----:|:---:|
|管理员|admin|123|
|管理员|admin2|1234|
|普通用户|aaa|aaa|
|普通用户|sss|sss|
|普通用户|ddd|ddd|
|匿名用户|anonym|123|
* 在登陆界面的右上角,可以设置自定义服务器。程序默认连接`localhost`本地服务器。
#### 系统主界面
![mianwindow](https://s2.ax1x.com/2020/03/06/3L0IKI.jpg)
* 点击用户头像以查看个人信息(仅第二版支持)
* 点击刷新按钮以更新版块和帖子列表的显示
* 点击 `logout` 按钮注销当前用户
* 点击 `UserManager` 进入管理模式(仅限管理员用户,仅第二版支持)
* 点击 `new Post` 发表帖子(仅限普通用户)
* 点击板块列表选择版块,点击帖子列表显示帖子内容
#### 管理界面(仅第二版支持)
![manager](https://s2.ax1x.com/2020/03/06/3L0TqP.jpg)
管理界面仅限管理员操作,分为三个页面
* `Add User` 页面下新增用户,可以指定用户的身份
* `Set BM` 页面下任命版主,系统规定每个版块最多只有一名版主,同一用户可以担任不同版块版主
* `Add Board` 页面下新增板块
#### 其他功能(仅第二版支持)
* 普通用户可在查看帖子页面下进行评论
* 普通用户可以在查看帖子页面下删除自己发布的、无评论的帖子
* 版主可以在查看帖子页面下删除自己管理版块内的帖子
## 服务端功能
![server](https://s2.ax1x.com/2020/03/06/3L0f8H.jpg)
* 服务器端运行后自动从本地载入数据,无需手动操作。log窗口显示实时请求处理。点击右上角关闭按钮自动保存文件
# 程序结构
![prog](https://s2.ax1x.com/2020/03/06/3L0h2d.png)
*(注:仅代表逻辑组织方式,并非与实际调用关系一一对应)*
在第二版程序中有一个`controller`类负责存储数据、处理用户操作。在第三版中,`controller`被拆分为一个`ClientCtrl`类和一个`ServerCtrl`类,分别用来处理客户端和服务端的数据和操作。
## 客户端
客户端有几种基本的类代表论坛系统中的对象,分别为`post`、`board`、`comment`、`user`,还有Qt designer界面类`LoginWindow`、`MainWindow`、`PostPage`、`ViewPage`、`NetConfigPage`。
`ClientCtrl`是一个单例,仅在程序启动时构造一个实体,用来存储系统内的临时信息、处理用户的操作以及与服务端进行网络通信。
## 服务端
服务端没有复杂的用户操作,因此不需要各种界面类,`ServerWindow`既负责显示服务器运行信息,又承担了与客户端数据通信的任务。`ServerCtrl`是服务端存储数据、处理数据的对象,仅在启动时构造一次。
# 设计说明
## 设计思路
在客户端和服务端,除了给定的用户类、帖子类等类型,我还希望有一个类来专门存储数据、处理数据,而不是用界面类去实现用户操作的功能。因此我在两边都设定了controller类。
为了保证每个运行的程序中的数据都是唯一的,就必须要求程序中的controller对象唯一,因此我定义了静态函数`getInstance()`来返回自己的指针,保证每次调用时都能找啊唯一的对象。
```cpp
clientCtrl* clientCtrl::getInstance()
{
if(ctrlPtr == nullptr)
ctrlPtr = new clientCtrl;
return ctrlPtr;
}
```
有了controller后,就可以在界面获取到用户操作后,调用controller中设计的函数,再用controller处理内存中的数据,以此做到界面与程序功能的独立性。
网络通信方面,为了更好的支持多用户操作,采用了短连接的方式,即每次客户端发出请求都要先与服务器建立连接再发送消息,得到服务器的正确响应后立即释放连接。
这样做的好处是节约了资源,方便多用户的实现,但缺陷在于无法收到服务端的更新消息,只能在客户端手动刷新显示。但考虑到论坛系统并不像实时通信系统一样对实时性有严格的需求,结合实际情况我选择了短连接方式。
## 数据结构与接口
帖子
```cpp
//post.h:
class post
{
public:
post(unsigned int nId, unsigned int nUserId,
unsigned int nBoardId, QString nTitle, QString nContent);
void setTitle(QString t);
QString getTitle();
void setContent(QString c);
QString getContent();
QDateTime getTime();
unsigned int getId();
unsigned int getUserId();
unsigned int getBoardId();
void setTime(QString t);
QVector<comment*> commentList; //评论列表
friend QTextStream &operator << (QTextStream &stream, post &p);
friend QTextStream &operator >> (QTextStream &stream, post* &p);
private:
unsigned int id; //帖子id
unsigned int userId; //发帖用户id
unsigned int boardId; //所属版块id
QString title; //帖子标题
QString content; //帖子内容
QDateTime time; //发帖时间
};
```
版块
```cpp
//board.h:
class board
{
public:
board(unsigned int bid, QString n);
QString getName();
unsigned int getId();
int getModeratorId();
void setModerator(int uid);
friend QTextStream &operator << (QTextStream &stream, board &b);
friend QTextStream &operator >> (QTextStream &stream, board* &b);
private:
unsigned int id; //版块id
QString name; //板块名
int moderatorId; //版主id,无版主 = -1
};
```
评论
```cpp
//comment.h:
class comment
{
public:
comment(unsigned int nUserId, QString nContent);
unsigned int getUserId();
QString getContent();
QDateTime getTime();
void setTime(QString s);
private:
unsigned int userId; //评论用户id
QString content; //评论内容
QDateTime time; //评论时间
};
```
用户
```cpp
//user.h:
class user
{
public:
user();
QString getName();
QString getPswd();
QString profile();
unsigned int getId();
int getStatus();
int login(QString nm, QString pw); //登陆
void logout(); //注销
virtual int deletePost(unsigned int bid,
unsigned int pid) = 0; //删帖
unsigned int getBoards();
void setBoards(unsigned int bds);
unsigned int boards;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
BUPT Computer Science C++论坛系统 (C++Qt).zip (92个子文件)
cm
.gitattributes 28B
本地版
QtProject
postpage.cpp 898B
forum2.pro 1KB
login.cpp 2KB
mainwindow.h 779B
comment.cpp 472B
board.cpp 1KB
mainwindow.cpp 4KB
login.ui 7KB
main.cpp 347B
post.h 891B
style
float.png 2KB
gray.css 8KB
error.png 2KB
radio_selected.png 1024B
question.png 4KB
black.css 10KB
add-line_vertical.png 3KB
logo.png 10KB
headPhoto.jpg 5KB
blue.css 8KB
qt_zh_CN.qm 115KB
add-line_horizontal.png 151B
checkbox_unchecked.png 581B
checkbox_checked.png 691B
radio_normal.png 888B
info.png 3KB
navy.css 8KB
close.png 1KB
minus.png 1KB
array_down.png 3KB
fontawesome-webfont.ttf 138KB
maxus.png 1KB
controller.cpp 9KB
board.h 559B
mainwindow.ui 5KB
postpage.ui 4KB
comment.h 406B
controller.h 1KB
postpage.h 381B
post.cpp 3KB
logo.ico 4KB
login.h 355B
postdata 3KB
网络版
postdata 3KB
userdata 112B
客户端
postpage.cpp 1KB
mainwindow.h 699B
loginwindow.ui 8KB
board.cpp 564B
loginwindow.h 492B
mainwindow.cpp 4KB
main.cpp 189B
post.h 696B
style
float.png 2KB
gray.css 8KB
error.png 2KB
radio_selected.png 1024B
question.png 4KB
black.css 10KB
add-line_vertical.png 3KB
logo.png 10KB
headPhoto.jpg 5KB
blue.css 8KB
qt_zh_CN.qm 115KB
add-line_horizontal.png 151B
f5.png 6KB
checkbox_unchecked.png 581B
checkbox_checked.png 691B
radio_normal.png 888B
info.png 3KB
navy.css 8KB
close.png 1KB
minus.png 1KB
array_down.png 3KB
fontawesome-webfont.ttf 138KB
net.png 7KB
maxus.png 1KB
board.h 521B
mainwindow.ui 5KB
postpage.ui 4KB
loginwindow.cpp 1KB
clientctrl.h 1KB
postpage.h 381B
post.cpp 877B
netconfigpage.h 381B
forum3.pro 1KB
clientctrl.cpp 5KB
netconfigpage.cpp 785B
netconfigpage.ui 3KB
logo.ico 4KB
README.md 13KB
共 92 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功