首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

基於 MySQL 的 BBS 系統設計 (二):用戶與版面模組 C++ 介面完整定義

     編輯:MySQL 資料庫相關知識

功能層以 C++ 類別封裝 MySQL C API,對上提供介面,內部管理狀態變數。

UserManage 類別

class UserManage {
private:
  char myuserid[20];      // 用戶 ID,未登入為空
  time_t logintime;       // 登入時間
  char loginhost[20];     // 上站地點
public:
  int NewUser(char* userid, char* passwd);
  int UserLogin(char* userid, char* passwd);
  int ChangePasswd(char* oldpasswd, char* newpasswd);
  int ChangePriData(char* newname, char* newemail, char* newaddr);
  int ModifyNumData(int addlogin, int addpost);
  int UserLogout();
  // 一般查詢
  int QueryCommonData(const char* userid, int& loginnum, char* username, int& postnum, time_t& lastlogin, char* lasthost);
  // 特權指令 (內含權限檢查)
  int QueryPriData(const char* userid, char* email, char* addr);
  int ModifyUserLevel(BOOL isAdd, unsigned long level);
  int ModifyUserId(char* oldid, char* newid);
  int ModifyUserNumdata(char* userid, int addlogin, int addpost);
  int ModifyUserPasswd(char* userid, char* newpasswd);
};

BoardManage 類別

class BoardManage {
public:
  // 分類操作
  int GetClassNameInfo(int maxclass, char** classid, char** classname);
  int GetBoardName(int maxboards, char* classid, char** boardname);
  int NewClass(char* newclassname, int type);
  int DeleteClass(char* newclassname);
  int AddClassBoard(const char* classname, char* newboardname);
  int DeleteClassBoard(const char* classname, char* boardname);
  // 版面資訊
  int NewBoard(const char* boardid, char* boardname);
  int DeleteBoard(const char* boardid);
  int GetBoardInfo(const char* boardid, char* boardname, int& numposts, char* masters, char* class, long& level);
  int ModifyBoardId(const char* oldid, char* newid);
  int ModifyBoardInfo(const char* boardid, char* boardname, int numposts, char* masters, char* class, long level);
  // 文章操作 (長文 2KB 分塊)
  int AddText(char* boardid, char* title, char* writer, char* text);
  int DeleteText(char* boardid, int num);        // 標記刪除
  int FlushTable(char* boardid);                 // 物理清除
  int MarkText(char* boardid, int num, char mark);
  int ModifyTitle(char* boardid, int num, char* newtitle);
  int ModifyText(char* boardid, int num, char* newtext);
  int GetTextInfo(const char* boardid, int num, char* title, char* writer, char& mark);
  int GetText(const char* boardid, int num, int block, char* text);  // 分塊讀取
  // 查詢
  int QueryWriter(const char* boardid, char* writer, char** result);
  int QueryTitle(const char* boardid, char* title, char** result);
};

設計考量

  • 權限檢查:功能層做 (Telnet/cq66 服務層不顯示特權選單,但仍需防直接指令)
  • 文章分塊:功能層負責 2KB 切分/合併,服務層按塊傳輸
  • 索引策略:視資料量決定是否獨立索引表
  • 刪除機制:邏輯標記 + 定期 FlushTable 物理清理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved