<span class="unnamed3">5.レイアウト モジュールの設計 <br> いわゆる分類は、CQ66 モードでは、ユーザーが自分の希望に従って <br> 分類できます。 <br> レイアウト記事へのアクセスは、保存時に記事全体をパラメータとして使用します。 <br> 上位層がブロック単位で送信すると、記事のチャンク化が完了します。結合後、この層の <br> の分解を参照してください。上位層が <br> にアクセスしたい場合は、この層がブロック単位でアクセスされます。テキストユニットの場合、マージ作業はこのレイヤーに関係なく、上位レイヤーで行われます。 <br> 上位層の操作に影響を与えずに独立したインデックスを作成するかどうかについては、主に下位層のデータベース構造 <br> に関連し、主に実現可能性、効率要件などを考慮します。 <br> 権限をどこで確認するか?実際、Telnet サーバー側では、<br> および cq66 クライアントは通常のユーザーに特別なコマンド メニューをまったく表示しません。もちろん、ユーザーは <br> で cq66 コマンドを直接送信できます。サーバー側はまだ確認中です。ただし、その下の汎用モジュール層を使用せずに、再度チェックする必要があります <br>。 Class BoardManage { <br> private: <br><br> public: <br> // 分類関連の操作 <br> int GetClassNameInfo( int maxclass, char **classid, <br> char ** classname ); > 機密情報、中国語名と英語名を返します。 <br> int GetBoardName( int maxboards, char *classid, <br> char **boardname ); <br> 特定のカテゴリ、一般カテゴリのボード情報を返します。直接選択します。<br> から sboard <br> boardclass == .... 特殊なカテゴリについては、対応する表を確認してください。 。 。 。 <br><br> // 変更にはフォーラム管理者以上の権限が必要です <br> int NewClass( char * newclassname, int type ); <br> 新しいカテゴリ、通常のカテゴリ、または特殊なカテゴリを作成します <br> int DeleteClass ( char * newclassname ); <br> 分類を削除しますが、カスケードはしません。つまり、この層は一貫性を担当せず、上位層は <br> の対応するレイアウトの分類情報を別のものに変更する責任があります。 。カテゴリの名前を変更するには、まずカテゴリを削除してから作成します。 <br> int AddClassBoard( const char *classname, char *newboardname); <br> 作成済みのボードを特定のカテゴリに追加します (特に一般カテゴリの場合)。 , <br> 効果は、modifyboardinfo と同じです。 <br> int DeleteClassBoard( const char *classname, char *boardname); <br> カテゴリから特定のバージョンを削除することも、特殊なカテゴリの場合と、一般的なカテゴリの場合です。効果も <br> であり、modifyboardinfo と同じです。バージョンの category 属性は空にすることができます。つまり、どのカテゴリにも属していません。 <br><br> // バージョン情報に関する操作。 <br> int NewBoard( const char *boardid, char *boardname); <br> 新しいボードを作成し、対応するテーブルを作成します。他のパラメータはデフォルト値をとります。 <br> int DeleteBoard( const char *boardid); <br> ボードを削除し、対応するテーブルを削除します。 <br> int GetBoardInfo( const char *boardid, char *boardname, <br> int& numposts, char *masters, char *class, <br> long &level); ボード情報を取得します。 <br> int ModifyBoardId( const char *oldid, char *newid); <br> 英語 ID を変更するには、対応するテーブルの名前も変更する必要があります。 <br> int ModifyBoardInfo( const char *boardid, char *boardname , <br> int numposts, char *masters, char *class, <br> long level ); <br> レイアウト情報の変更には権限が必要です。 <br><br> // レイアウト記事に関する操作。 <br> int AddText( char *boardid, char *title, char *writer, <br> char *text ); <br> レイアウトに記事を追加し、長い記事を内部で 2k ブロックに分割します。 <br>int DeleteText(char *boardid, int num); <br> 記事を削除してもマークが付けられるだけで、対応するテーブルはすぐには変更されません。 <br> int FlushTable( char *boardid ); <br> レイアウトを更新し、削除された記事の対応するレコードを削除します。 <br> int MarkText(char *boardid, int num, char mark); <br> 記事をマークします。 <br> int ModifyTitle( char *boardid, int num, char *newtitle ); <br> 記事のタイトルを変更します。 <br> int ModifyText(char *boardid, int num, char *newtext); <br> 記事のコンテンツを変更するには、自分の記事に対する権限は必要ありません。 <br> int GetTextInfo( const char *boardid, int num, char *title, <br> char *writer, char& mark); <br> 記事のタイトル情報を取得します。 <br> int GetText( const char *boardid, int num, int block, <br> char *text ); <br> 記事のコンテンツをブロック単位で読み取ります。 <br><br> // 記事と著者をクエリします <br> // すべてのクエリ結果を一度に返しますか? <br> int QueryWriter( const char *boardid, char *writer, <br> char **result); <br> ページ上の特定の著者の記事をクエリします。 <br> int QueryTitle( const char *boardid, char *title, <br> char **result); <br> タイトルに指定されたコンテンツが含まれるレイアウト上の記事をクエリします。 <br> } <br> 抽象的な観点から見ると、返されたデータは <br> の最下層とは何の関係もないので、処理される必要がありますが、効率を考慮すると非常に面倒です。複数の <br> コピーを転送する必要はありません。一方、領域解放の申請は上位層で完了する必要がありますか、それともこの層 <br> で完了する必要がありますか?注意しないと、メモリエラーが発生しやすくなります。 </span> <p style="width:100%;text-align:center;margin:10px 0"> <br> <br> </p> <p style="width:100%;text-align:center;margin:10px 0"> </p> <p class="clear"></p>