Springboot ネットワークのマイクロストーリーの設計と実装
まとめ
ビッグデータの時代、データは爆発的に増加しています。情報化時代の傾向と情報セキュリティの要件に応えるために、インターネットを使用して他の産業にサービスを提供し、生産を促進することは、抗しがたいトレンドとなっています。オンライン小説の要件に基づいて、統合構造のネットワークマイクロフィクションを開発し、複雑なシステムを分割することで、需要の変化への迅速な対応を実現し、システムの安定性を保証し、プラットフォーム要件の持続的かつ大規模な開発を保証します。
本稿で研究したネットワークマイクロフィクションは、対応するソフトウェア構築とプログラムコーディング作業を完成させ、背景データの主記憶装置としてMysqlを採用し、ビジネスシステムのコーディングと開発にSpringbootフレームワーク、JSP技術、Ajax技術を使用し、システムの完全な機能を実現しました。同時に、小説閲覧、小説情報、小説分類、章読み、小説作成管理など、オンラインマイクロフィクションの基本機能を完了します。
キーワード: ネットワーク マイクロ フィクション、モノリシック構造、Mysql データベース
スプリングブートネットワークマイクロノベルの設計と実装
概要
ビッグデータの時代には、データが爆発的に増加しています。情報化時代の傾向と情報セキュリティの要件を満たすために、インターネットを使用して他の産業にサービスを提供し、生産を促進することは、抗しがたいトレンドとなっています。ネットワーク小説の要件の下では、9月小説ネットワークの統合構造の開発、複雑なシステムの分割、需要の変化への迅速な対応の実現、システムの安定性の保証、プラットフォームの持続可能性の確保、規模の開発要件。
本稿で研究したネットワークマイクロ小説は、対応するソフトウェアの構築とプログラムコーディングを改善し、バックグラウンドデータの主記憶装置としてMySQLを採用し、スプリングブートフレームワーク、JSP技術、およびAjax技術を使用してビジネスシステムをエンコードおよび開発し、すべての機能を実現します。システムの。同時に、オンラインマイクロノベルの基本機能である小説閲覧、小説情報、小説分類、章読み、小説作成管理などを完了します。
キーワード:ネットワークマイクロフィクション。一体構造。MySQLデータベース
目次
中国におけるコンピュータネットワークの普及に伴い、近年オンライン小説閲覧はインターネットの新たなモデルとなっており、文字や画像などの静的な情報閲覧をベースに、その他の情報を付加した総合的なプラットフォームである。ネットワークマイクロフィクションは、本サービスを提供する動的インタラクション機能を備えた経営情報システムであり、インターネット上に新たなWebサイトを実現します。ユーザーはオンライン上で小説情報を閲覧し、自分の好みに合わせて小説を読んだり、収集したり、コメントしたりすることができます。このネットワーク マイクロ フィクションを通じて、ユーザーは家にいなくても必要な新しい情報を閲覧でき、いつでもどこでも Web を閲覧できます。従来の小説の読書の制限を取り除きます。
ネットワークマイクロフィクションは、著者と読者が相互にコミュニケーションするためのプラットフォームを提供できます。著者は満足のいく作品をこのプラットフォーム上で公開してより多くの人に見てもらうことができ、読者はこのプラットフォーム上で興味のある作品を見つけて投稿することができます。作品へのコメント機能により、作者は読者のコメントに応じてタイムリーに作品の内容を修正したり、創作上のアイデアを仲介したりすることができます。このプラットフォームの存在により、小説の本を購入する回数が減り、多額の費用を節約することもできます。
2007 年 4 月、カナダはインターネット上で「National Fiction」執筆イベントを主催しました。このイベントには、カナダの 12 の州と地域から作家を代表して、合計 12 人の作家が参加しました。12 人の著名な作家が 12 時間以内に共同小説を完成させました。小説のテーマは「クロスカントリーストーリー」。
有名なアメリカの作家ジョン・アップダイクと他の44人の作家が、「殺人から始まる物語」というタイトルの小説をオンラインで完成させた。このオンライン小説執筆活動は、有名なオンライン書店である Amazon が主催しています。Web小説が再び大流行中。
統計によると、中国のインターネットユーザー約1,000万人のうち、80%が21歳から35歳です。インターネット文学の隆盛の背景には、1970年代から1980年代生まれの若手作家や若い文学愛好家の急速な成長がある。インターネット文学を「時代の新たな文化運動の先駆け」と評する人もおり、インターネット文学の台頭は「新たな文明の警笛を鳴らす」可能性がある。
国内のオンライン書店はおよそ 1997 年以降に登場しました。Netease などの企業が提供した無料スペースは、初期の書店の発展に物質的な基盤を提供しました。初期のオンライン書籍サイトは転載が中心で、著作権への意識は薄かった。一部の Web サイトでは、格闘技や恋愛などの物理的な書籍をスキャンしてインターネットに送信し、Web サイトのコンテンツを充実させていますが、他の Web サイトからそれらを直接複製する Web サイトも増えています。このような一般的な環境において、ゴールデン ブックストアは先行者利益を活かしてオンライン書籍サイトのリーダーの地位を確固たるものとしています。「インターネットでの読書はゴールデンブックストアを知らず、それをネットのバグと呼ぶのは無駄です」として知られています。
複数の外国語を習得でき、コンピューター科学者は主に C 言語、Java、Perl など人間の自然言語ではないプログラミング言語に精通しています。さまざまな企業が開発した「ミドルウェア」は十分に標準化されていないため、Sun は J2EE を立ち上げ、この標準を使用して問題を解決しました。これは、各層が対応するサーバーとコンポーネントを実行できるようにする優れたメカニズムを提供し、システムを安定して使用できるようにし、開発を効率的にし、保守を容易にします。
Spring フレームワークは、制御の反転機能を備えたコンテナを提供するJava プラットフォーム上のオープン ソース アプリケーション フレームワークです。Spring フレームワーク自体にはプログラミング モデルに対する制限はありませんが、Java アプリケーションで頻繁に使用されるため非常に人気があり、後にEJB (EnterpriseJavaBeans) モデルの補足として、または代替として使用されるようになりました。Spring フレームワークは、制御の反転のコア機能の使用や、宣言型トランザクション管理のためのアスペクト指向プログラミングを使用した管理オブジェクトのライフサイクルのコンテナ化を実現するための依存性注入による制御の反転の実装など、開発のための一連のソリューションを提供します。さまざまな永続化テクノロジがデータ アクセスを管理し、開発を容易にする多数の優れた Web フレームワークを提供します。Spring フレームワークには、制御反転 (IOC) の機能があります。IOC は、プロジェクトの保守とテストを容易にするように設計されており、Java リフレクション メカニズムを通じて Java オブジェクトの統合設定と管理の方法を提供します。Spring フレームワークは、コンテナを使用してオブジェクトのライフ サイクルを管理します。コンテナは、XML ファイルまたはクラスの特定の Java アノテーションをスキャンすることでオブジェクトを構成できます。開発者は、依存関係の検索または依存関係の注入を通じてオブジェクトを取得できます。アスペクト指向プログラミング(AOP) フレームワークと同様に、Spring AOP フレームワークはプロキシ モードに基づいており、実行時に構成できます。AOP フレームワークは主にモジュール間の相互関係のためにモジュール化されています。Spring フレームワークの AOP フレームワークは基本的な AOP 機能のみを提供しており、AspectJ フレームワークと比較することはできませんが、AspectJ との統合により基本的なニーズにも対応できます。Spring AOP技術を利用することで、Springフレームワークにおけるトランザクション管理やリモートアクセスなどの機能を実現できます。Spring のトランザクション管理フレームワークは、Java プラットフォームに抽象化メカニズムを導入し、ローカルおよびグローバル トランザクション、およびネストされたトランザクションが、Java プラットフォーム上のほぼすべての環境でセーブポイントを使用して動作できるようにします。Spring は複数のトランザクション テンプレートを統合しており、システムはトランザクション テンプレート、XML または Java アノテーションを通じてトランザクションを設定でき、トランザクション フレームワークにはメッセージングやキャッシュなどの機能が統合されています。Spring のデータ アクセス フレームワークは、開発者がアプリケーションでデータベースを使用するときに遭遇する一般的な問題に対処します。Java: JDBC、iBATS/MyBATIs、Hibernate、Java Data Objects (JDO)、ApacheOJB、Apache Cayne などのすべての一般的なデータ アクセス フレームワークのサポートを提供するだけでなく、Spring のトランザクション管理と併用してデータ アクセスを提供することもできます。柔軟な抽象化。Spring フレームワークは、当初、独自の Web MVVM フレームワークを構築するつもりはありませんでしたが、開発プロセス中、開発者は、既存の Struts Web フレームワークのプレゼンテーション層とリクエスト処理層の間、およびリクエスト処理層とリクエスト処理層の間の分離が重要であると考えていました。モデルだけでは十分ではなかったので、SpringMVVM を作成しました。
-
- MySQLデータベース
MySQL ソフトウェアを使用する理由は、複数のユーザーがアクセスできること、およびその中にアーカイブなどが存在するためです。データを分類してからテーブルに分けて格納するという特殊な操作により、データ管理システム自体の速度が向上し、データベースを柔軟に利用できるようになります。MySQL のコードは公開されており、他の人がそれを 2 回コンパイルしてアップグレードすることができます。この機能により、ユーザーのコストを削減し、適切なソフトウェアと組み合わせて優れた Web サイト システムを構築できます。欠点もありますが、あらゆる面でユーザーの主流のアプリケーションオブジェクトです。
-
- B/S構造
B/S (ブラウザ/サーバー) は、以前のアーキテクチャよりも便利なアーキテクチャです。Web サーバーを使用してデータの転送と交換を完了します。クライアントとしてブラウザをダウンロードするだけで、作業は「スリム化」効果を実現し、ソフトウェアのノンストップインストールの問題を考慮する必要はありません。
-
- JavaScript ランタイムモード
JavaScript はネットワークに属する高級スクリプト言語です。Web アプリケーションの開発で広く使用されています。Web ページにさまざまな動的機能を追加し、ユーザーによりスムーズで美しいブラウジング効果を提供するためによく使用されます。通常、JavaScript スクリプトは HTML に埋め込むことで独自の機能を実現します。。
1.1 はインタープリタ型スクリプト言語です (コードはプリコンパイルされていません)。
1.2 は主にHTML ( Standard Universal Markup Languageに基づくアプリケーション) ページにインタラクティブな動作を追加するために使用されます。
1.3 は HTML ページに直接埋め込むことができますが、別のjsファイルとして記述すると、構造と動作を分離するのに役立ちます。
1.4 クロスプラットフォーム機能。ほとんどのブラウザをサポートしているため、複数のプラットフォーム ( Windows、Linux、Mac、Android、iOSなど)で実行できます。
1.5 JavaScript スクリプト言語には、他の言語と同様に、独自の基本的なデータ型、式、算術演算子、およびプログラムの基本的なプログラム フレームワークがあります。JavaScript は、データとテキストを処理するための 4 つの基本データ型と 2 つの特別なデータ型を提供します。変数は情報を保存する場所を提供し、式はより複雑な情報処理を完了できます。
-
- B/Sシステムの動作原理
B/S アーキテクチャは、ブラウザ要求とサーバー応答の動作モードを採用しています。
ユーザーはブラウザを介して、インターネット上の Web サーバーによって生成されるテキスト、データ、画像、アニメーション、ビデオ オン デマンド、サウンドなどの情報にアクセスできます。
また、各 Web サーバーはさまざまな方法でデータベース サーバーに接続でき、実際には大量のデータがデータベース サーバーに保存されます。
Web サーバーからプログラムをダウンロードしてローカルで実行します。ダウンロード プロセス中にデータベースに関連する命令が発生すると、Web サーバーはその命令をデータベース サーバーに渡して解釈および実行し、Web サーバーに返します。 Web サーバーはそれをユーザーに返します。この構造では、多数のネットワークが接続されて巨大なネットワーク、つまりグローバルネットワークが形成されます。各企業は、この構造に基づいて独自のインターネットを構築できます。
B/Sモードでは、ユーザーはブラウザを通じてネットワーク上に分散した多数のサーバーへのアクセスを要求し、ブラウザの要求はサーバーで処理され、その処理結果と対応する情報がブラウザに返されます。すべて Web サーバーによって完了します。フレーム構造とオペレーティング システムに組み込まれたブラウザにより、この構造は今日のソフトウェア アプリケーションの主流の構造モードになりました。
ソフトウェア開発のプロセスでは、問題が解決できるかどうかを評価し、最小限の時間と最小限のコストで解決するための体系的な実現可能性分析が不可欠です。上記の目標を達成するには、これらの問題の解決策の長所と短所、およびこれらのシステムを大規模に開発することの経済的利点も考慮する必要があります。ここでは、技術的な実現可能性、運用上の実現可能性、および経済的な実現可能性を使用して、システムの実現可能性の調査を行うことができます。ネットワーク マイクロ フィクションの実現可能性分析は次のとおりです。
ネットワーク マイクロ フィクションは Java プログラミング言語と MVVM モデルを使用します。データベース部分は現在普及している MYSQL データベースを使用します。ネットワーク マイクロ フィクション内のすべてのデータ リソースは Mysql データベースに保存されます。システムは多くの場所で AJAX 非同期操作を使用します。 AJAX テクノロジは、ユーザーが指定したデータを部分的に更新できるため、サーバーによるページの分析が軽減されるだけでなく、ユーザー エクスペリエンスも大幅に向上します。このシステムの環境構成も、HBuilder エディタを使用するため比較的簡単であり、HBuilder には独自の Apache サーバーと JDK 環境があるため、再構成する必要はありません。
このシステムは Java と Mysql を使用してトランザクションとデータ ロジックをサポートし、H5 を使用してフロント ページを表示します。
HTML Web ページ内のさまざまなコンポーネントは、タグの形式で識別されます。以下は HTML の基本的な構成レイアウトです。
図 3-1 HTML の基本構造
ネットワーク マイクロ フィクションは Java と Mysql の環境で実行され、システムのコストは主にソフトウェアの開発と保守に配分されます。しかし、このシステムが実用化されれば、人々の利便性が向上するだけでなく、ユーザーにとっては時間とエネルギーが節約され、オペレーターにとっても大幅な利便性と作業負荷の軽減が期待できます。ネットワークマイクロフィクションは実際にはそれほど複雑ではなく、開発時の経済的支出も大きくなく、システム開発に時間も費やさないため、時間と経済的メリットは維持管理コストをはるかに上回ります。このシステムの開発が実現可能かつ適切であること。
このシステムはブラウザとサーバーをベースとしたネットワークマイクロノベルであり、システム開発完了後はブラウザに正しいURLアドレスを入力するだけでアクセス可能です。本システムのトップページはシンプルかつ分かりやすく、操作ガイダンスなしで操作が可能で、システム管理者でも一般ユーザーでも、ページ上の操作はすべてブラウザ上で完結するため、パソコンに接続していれば操作可能です。インターネットへの接続 この状況であればブラウザを開いて操作可能です。また、利用前に環境構築を行う必要がないため、利便性が高く、シンプルで使いやすいシステムとなっております。
システムに対するユーザーの要求に応じて、システムには操作が簡単であり、情報を正確かつ完全に管理できることが求められます。ネットワークマイクロフィクションの要件を分析した後、システム全体は主に管理者と一般ユーザーの2つの部分に分かれており、各モジュールの下の分岐機能は異なります。関数を次のように説明します。
管理者モジュール:システムユーザー管理、小説分類管理、自己紹介設定、ユーザー登録管理、小説作成管理、章管理、小説情報管理、ライブラリ管理、フリーゾーン管理、システム管理。
ユーザーモジュール: 小説閲覧、小説情報、掲示板、ライブラリ、章、小説作成、フリーゾーン、小説のいいねとコレクションなど。
ユーザーのユースケース図を以下に示します。
図 3-1 ユーザーの使用例図
管理者のユースケース図を以下に示します。
図 3-1 管理者の使用例図
ユースケース図に従って、いくつかの重要なユースケースが説明されています。
登録の使用例を次の表に示します。
表 3-1 登録の使用例の説明
ユースケース名 |
登録 |
参加者 |
ユーザー |
説明 |
ユーザーは関連情報を入力して登録を完了し、システムのユーザーになります |
前提条件 |
なし |
事後条件 |
ユーザーが関連情報を入力すると、ユーザー アカウントが使用可能になります。 |
イベントの流れ |
|
補足 |
|
ログインの使用例を以下の表で説明します。
表 3-1 ログインの使用例の説明
ユースケース名 |
ログイン |
参加者 |
ユーザー |
説明 |
ユーザーはユーザー名とパスワードを入力してシステムにログインします |
前提条件 |
ユーザー登録済み |
事後条件 |
ユーザー名とパスワードが正しい |
イベントの流れ |
(1) ユーザーはログインページでユーザー名とパスワードを入力します。 (2) システムは、ユーザーが入力したユーザー名とパスワードを検出します。 (3) ログイン成功を表示し、メインページに戻ります |
補足 |
(a) パスワードが間違っていることが確認され、ログインページに戻ります。 |
個人情報管理のユースケースを以下の表に示します。
表 3-1 個人情報管理のユースケースの説明
ユースケース名 |
個人情報の管理 |
参加者 |
ユーザー |
説明 |
ユーザーは個人情報を閲覧および変更します |
前提条件 |
ユーザーがログインしました |
事後条件 |
なし |
イベントの流れ |
(1) ユーザーが個人情報を閲覧する場合 (2) ユーザーが個人情報を変更する場合 |
補足 |
(a) ユーザーはパスワードを変更できます (b) ユーザーは連絡先情報を変更することができます |
メッセージの使用例を以下の表で説明します。
表 3-1 メッセージの使用例の説明
ユースケース名 |
メッセージ |
参加者 |
ユーザー |
説明 |
ユーザーがメッセージを残す |
前提条件 |
ユーザーがログインしました |
事後条件 |
メッセージの内容は違法ではありません |
イベントの流れ |
(1)メッセージページにメッセージデータを入力し、メッセージを送信 (2)掲示板を更新・表示する |
補足 |
(a) メッセージの内容を空にすることはできません |
コメントの使用例の説明を次の表に示します。
表 3-1 コメントの使用例の説明
ユースケース名 |
コメント |
参加者 |
ユーザー |
説明 |
ユーザーのコメント |
前提条件 |
ユーザーがログインしました |
事後条件 |
コメントは違法ではない |
イベントの流れ |
(1) コメントページにコメントデータを入力し、コメントを投稿する (2) コメントボードの更新と表示 |
補足 |
(a) コメント内容を空にすることはできません |
新しい分類の使用例の説明を以下の表に示します。
表 3-1 新しい分類の使用例の説明
ユースケース名 |
小説の分類 |
参加者 |
ユーザー |
説明 |
ユーザーは新しい分類操作を実行します |
前提条件 |
ユーザーがログインしました |
事後条件 |
小説は存在し、分類することができます |
イベントの流れ |
(1)小説ページで分類したい小説をクリックします (2) 新規分類データを入力します。 |
補足 |
(a) 新規分類フォームデータを空にすることはできません |
ライブラリの使用例の説明を次の表に示します。
表 3-1 ライブラリの使用例の説明
ユースケース名 |
図書館 |
参加者 |
ユーザー |
説明 |
ユーザーがライブラリ操作を実行する |
前提条件 |
ユーザーがログインしました |
事後条件 |
書籍ライブラリが存在し、照会できる |
イベントの流れ |
(1) ライブラリページで問い合わせたいライブラリをクリックします (2) ライブラリデータを入力します。 |
補足 |
(a) ライブラリフォームデータを空にすることはできません |
新しい使用例を以下の表で説明します。
表 3-1 新しい使用例の説明
ユースケース名 |
フィクション管理 |
参加者 |
ユーザー |
説明 |
ユーザーは追加、変更、削除、閲覧などの機能を提供します。 |
前提条件 |
|
事後条件 |
なし |
イベントの流れ |
(1) ユーザーが小説を閲覧・修正する (2) ユーザーが小説を追加 (3) ユーザーが小説を削除した場合 |
補足 |
(a) 新規追加小説が条件を満たしていない場合、追加は失敗します (b) 改変された小説が要件を満たしていない場合、改変は失敗します。 |
各章のユースケースの説明を以下の表に示します。
表 3-1 章のユースケースの説明
ユースケース名 |
章管理 |
参加者 |
ユーザー |
説明 |
ユーザーは追加、変更、削除、閲覧などの機能を提供します。 |
前提条件 |
|
事後条件 |
なし |
イベントの流れ |
(1) ユーザーは章を表示および変更します (2) ユーザーが章を追加する (3) ユーザーがチャプターを削除する |
補足 |
(a)新添加的章节不符合要求时会添加失败 (b)修改的章节不符合要求时会修改失败 |
网络微小说的业务流程如下图所示。
图3-3 系统业务流程图
管理员拥有最高权限,在对各项信息进行增加、删除、修改后会更新后台数据库的内容,用户在登录进行小说资讯浏览、章节阅读。书库查询、小说创作、公告栏信息、免费专区了解等指令动作同样会更新后台数据。
与强调控制逻辑的程序流程图不同,它更关心的是整个系统中数据的具体流动以及数据的加工处理的整个客观过程,是对数据规格的说明。也正因如此,系统数据流图作为系统结构化分析方法中极为重要的一种描述工具备受青睐。
网络微小说的顶层数据流如下图所示。
图3-4系统顶层数据流图
系统顶层数据流:外部实体为用户,第一个流程为登录验证,用户信息表返回密码验证,是否正确,正确则登录系统,错误则反馈信息,登录系统后,根据不同用户的功能选择,来读写数据库。
系统底层数据流如下图所示。
系统底层数据流:外部实体为管理员和普通用户,数据流分别有管理员和普通用户流向系统数据流程,数据表提供数据支持,来完成逻辑操作。
网络微小说采用三层开发设计模式,分为:用户界面层,业务逻辑层和数据访问层。用户界面层用来和用户交互,业务逻辑层负责业务的处理和各层之间的数据的传递;数据访问层负责对数据库的访问和检索。
系统的架构图如下图所示。
图4-1 系统架构图
系统各层之间的调用过程如下:
(1)用户通过用户界面层访问系统,向系统提交请求,界面层对请求进行初步的处理和包装,并判断是否要与业务逻辑层进行交互。
(2)业务逻辑层接收来自界面层的请求,对请求进行数据处理。然后调用数据访问层来实现数据库访问,数据访问层访问数据库,将数据读出并返回给逻辑层。
(3)逻辑层将处理的结果,返回给界面层。界面层加以处理呈现给用户。
进入系统后首先要进行登录,验证你的身份,赋予你不同的权限。当你成功登录后,页面会有多个板块,分别是系统用户管理、小说资讯管理、小说分类管理、章节管理、书库管理、小说创作管理、免费专区管理、系统管理。里面界面简单易懂,根据标示可以直接进行方便快捷的操作。
系统功能结构图如下所示。
图4-2系统功能结构图
管理员账户的基本信息管理。主要提供管理员账户的基本信息录入、删除、维护和查询等功能,包括:
管理员录入管理员账户基本信息;
管理员更新、增加及删除管理员账户基本信息;
用户根据管理员账户 ID 查询基本信息;
系统管理员更改个人密码;
留言的基本信息管理。主要提供留言的基本信息录入、修改和查询功能,包括:
用户录入留言基本信息;
管理员更新、增加及删除留言基本信息;
评论的基本信息管理。主要提供评论的基本信息录入、修改和查询功能,包括:
用户录入评论基本信息;
管理员更新、增加及删除评论基本信息;
管理员根据评论 ID 查询评论基本信息;
小说分类的基本信息管理。主要是提供小说分类的基本信息录入、维护和查询功能,包括:
用户录入小说分类基本信息;
用户更新、增加及删除小说分类基本信息;
用户根据小说分类 ID 查询小说分类基本信息;
小说创作的基本信息管理。主要是提供小说创作的基本信息录入、维护和查询功能,包括:
用户录入小说创作基本信息;
用户更新、增加及删除小说创作基本信息;
用户根据小说创作 ID 查询小说创作基本信息;
小说的基本信息管理。主要提供小说的基本信息录入、删除、维护和查询功能, 包括:
管理员录入小说信息;
管理员更新、增加小说基本信息;
管理员根据小说 ID 查询小说基本信息;
用户根据个人信息导航栏查询小说信息;
免费专区的基本信息管理。主要提供免费专区的基本信息录入、删除、维护和查询功能, 包括:
管理员录入免费专区信息;
管理员更新、增加免费专区基本信息;
管理员根据免费专区ID 查询免费专区基本信息;
用户根据个人信息导航栏查询免费专区信息;
一个好的系统它的后台数据库一定要考虑的全面,这和我们建造房子一个概念,房子不是随心所欲建起来的,一切都是在合理设计的基础是实现的,地基打牢固了房子才能建的更高。数据库如果设计的很合理,而且每个方面都能考虑到了那么这个系统才能不会出现大的问题。
本系统在数据库中存放了多张表,分别是用户表、评论表、书库表、小说分类表、小说创作表、免费专区表、小说资讯表。
系统的主要实体间关系E-R图如下图所示。
图4-7系统E-R图
此环节把概念转变成数据。由于整个数据库所处理的信息过多,就只展示几个表。
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
id |
Int |
4 |
10 |
||
2 |
xiaoshuobianhao |
150 |
255 |
|||
3 |
xiaoshuobianhao |
150 |
255 |
|||
4 |
shuming |
150 |
255 |
|||
5 |
goumairen |
150 |
255 |
|||
6 |
wendang |
150 |
255 |
|||
7 |
addtime |
DateTime |
8 |
19 |
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
id |
Int |
4 |
10 |
||
2 |
zhanghao |
150 |
255 |
|||
3 |
zhaopian |
150 |
255 |
|||
4 |
xingming |
150 |
255 |
|||
5 |
liuyan |
150 |
255 |
|||
6 |
addtime |
DateTime |
8 |
19 |
||
7 |
huifu |
150 |
255 |
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
ID |
Int |
4 |
10 |
||
2 |
shukuID |
1073741823 |
255 |
|||
3 |
pinglunneirong |
1073741823 |
255 |
|||
4 |
pinglunren |
1073741823 |
255 |
|||
5 |
addtime |
DateTime |
8 |
19 |
||
6 |
biao |
150 |
255 |
|||
7 |
pingfen |
Int |
4 |
10 |
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
ID |
Int |
4 |
10 |
||
2 |
username |
1073741823 |
255 |
|||
3 |
xwid |
1073741823 |
255 |
|||
4 |
biao |
1073741823 |
255 |
|||
5 |
addtime |
DateTime |
8 |
19 |
||
6 |
ziduan |
1073741823 |
255 |
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
id |
Int |
4 |
10 |
||
2 |
Xiaoshuochuangzuo |
150 |
255 |
|||
3 |
xiaoshuobianhao |
150 |
255 |
|||
4 |
shuming |
150 |
255 |
|||
5 |
xiaoshuoleibie |
150 |
255 |
|||
6 |
zuozhe |
150 |
255 |
|||
7 |
jiage |
150 |
255 |
|||
8 |
beizhu |
1073741823 |
255 |
|||
9 |
goumairen |
150 |
255 |
|||
10 |
iszf |
30 |
255 |
|||
11 |
addtime |
DateTime |
8 |
19 |
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
id |
Int |
4 |
10 |
||
2 |
xiaoshuoleibie |
150 |
255 |
|||
3 |
addtime |
DateTime |
8 |
19 |
序号 |
字段名称 |
字段类型 |
大小 |
允许为空 |
最大长度 |
备注 |
1 |
id |
Int |
4 |
10 |
||
2 |
xiaoshuobianhao |
150 |
255 |
|||
3 |
shuming |
150 |
255 |
|||
4 |
xiaoshuoleibie |
150 |
255 |
|||
5 |
zuozhe |
150 |
255 |
|||
6 |
zuozhejianjie |
1073741823 |
255 |
|||
7 |
tushujianjie |
1073741823 |
255 |
|||
8 |
fengmian |
150 |
255 |
|||
9 |
jiage |
150 |
255 |
|||
10 |
xiaoshuoyulan |
1073741823 |
255 |
|||
11 |
dianzan_d |
Int |
4 |
10 |
||
12 |
dianzan_c |
Int |
4 |
10 |
||
13 |
addtime |
DateTime |
8 |
19 |
通过Mysql库和Mysqli库函数连接。这种方法是Java连接MySQL经常使用的方法,不管是从效率上还是易用性来说,它都比用ODBC接口连接好。
Java存取mysql数据库的四个步骤是:
(1)建立连接:mysql_connect ();
(2)操纵数据库:mysql_select_db();返回布尔型数据值
(3)操纵数据库中的数据:mysql_query ();
(4)关闭连接:mysql_close ();
数据库连接代码如下所示。
<?Java
error_reporting(0);
//数据库链接文件
$host='127.0.0.1';//数据库服务器
$user='root';//数据库用户名
$password='';//数据库密码
$database='Javarjgcxwzzxa1a8';//数据库名
$conn=@mysql_connect($host,$user,$password) or die('数据库连接失败!');
@mysql_select_db($database) or die('没有找到数据库!');
mysql_query("set names 'gb2312'");
function getoption($ntable,$nzd)
{
$sql="select ".$nzd." from ".$ntable." order by id desc";
$query=mysql_query($sql);
$rowscount=mysql_num_rows($query);
if($rowscount>0)
{
for ($fi=0;$fi<$rowscount;$fi++)
{
?>
<option value="<?Java echo mysql_result($query,$fi,0);?>"><?Java echo mysql_result($query,$fi,0);?></option>
<?Java
}
}
}
该登录模块利用js进行设计,JavaScript函数CheckSubmit()对输入框是否为空进行验证,使用js的技术结合Mysql数据库的查询语句进行登录信息的验证。首先从文本框中分别获得账号user_name和密码user_pw,使用Sql语句“select * from t_user where user_name=‘”+user_name+“’ and user_pw=‘”+user_pw+“’”将查询结果赋给rs结果集,若mysql_query()返回值为空,表示数据库找不到该用户数据,若mysql_query()返回值不为空,则显示登录成功,进入主界面。
用户登录流程图如下所示。
图5-1用户登录流程
用户登录流程:用户只有输入正确的用户名和密码才会成功进入系统,用户输入用户名密码后点击登录按钮,系统会进行校验该用户名是否存在,如果用户名与密码不匹配或者用户名不存在,则返回主界面。
系统登录界面如下图所示。
图5-2系统登录界面
登录功能的逻辑代码如下所示。
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
在浏览器的地址栏里输入http://localhost:3306/index.Java 地址,就可以跳转到网络微小说的首页,首页是由4个页面组成的,包括top、left、down和center等页面,这里也是浏览者访问系统的入口,通过@ include引入。
首页载入流程图如下所示。
图5-3首页载入流程
首页载入流程:系统先连接数据库,显示界面参数初始化,读取数据库的数据表,读取html显示模板,对数据按添加时间排序,按照模板设计位置显示数据,刷新显示界面,断开数据库连接。
首页如下图所示。
图5-4首页界面
其中载入首页的主要代码如下。
<?Java include_once 'qttop.Java';?>
<?Java include_once 'qtleft.Java';?>
<?Java include_once 'qtdown.Java';?>
系统的用户通过自行注册生成,在系统首页点击用户注册菜单,系统跳转到对应的注册页面。点击重置按钮,清空所填数据,点击注册按钮完成注册。
用户注册流程图如下所示。
图5-5用户注册流程
注册个人信息实现流程为:填写个人信息,系统使用JQuery选择器获取在网页中输入的注册信息,再对联系方式、登录密码等信息进行验证,验证通过后用Ajax异步请求方式向服务器发送请求并把数据传送到后台,然后验证用户名是否已存在,如果已存在则注册失败提示“用户名已存在”;如果用户表中没有该用户名则把用户信息加入数据库,把操作状态以json字符串方式返回到前台。Ajax请求成功接收到返回的数据时会触发成功回调函数,然后解析返回的json字符串,系统根据返回信息弹出提示框,注册成功后返回登录页。
用户注册界面如下图所示。
图5-5用户注册界面
用户注册页面的逻辑代码如下。
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
用户给小说添加评论,包括评分,评论人,评论内容等,在pinglunadd.Java实现评论的逻辑添加,管理员管理系统的所有评论信息,在pinglun_list.Java实现评论的管理。
评论流程图如下所示。
图5-6信息评论流程
用户登录成功后,浏览小说页面,输入评论语,添加该评论,修改评论,返回评论相关界面。
评论添加界面如下图所示。
图5-7评论添加界面
添加评论的主要逻辑代码如下。
<?Java
session_start();
if($_SESSION["username"]=="")
{
echo "<script>javascript:alert('对不起,请您先登陆!');window.close();</script>";
exit;
}
include_once 'conn.Java';
$id=$_GET["id"];
$addnew=$_POST["addnew"];
if ($addnew=="1" )
{
$wenzhangID=$_POST["wenzhangID"];$pinglunneirong=$_POST["pinglunneirong"];$pinglunren=$_POST["pinglunren"];$biao=$_POST["biao"];$pingfen=$_POST["pingfen"];
$sql="insert into pinglun(wenzhangID,pinglunneirong,pinglunren,biao,pingfen) values('$wenzhangID','$pinglunneirong','$pinglunren','$biao','$pingfen') ";
mysql_query($sql);
echo "<script>javascript:alert('评论成功!'); window.opener.location.reload();window.close();</script>";
}
?>
用户选择相应的小说资讯,通过id传参,找到id为此传参的小说,在shoucangadd.Java浏览资讯内容。
小说资讯界面如下图所示。
图5-8小说资讯界面
小说资讯管理界面如下图所示。
图5-9小说资讯管理界面
小说资讯的主要逻辑代码如下。
<%
String lb=request.getParameter("lb");
HashMap ext = new HashMap();
new CommDAO().insert(request,response,"xinwentongzhi",ext,true,false,"xinwentongzhi_add.jsp?lb="+lb);
%>
管理员发布章节内容后,用户找到对应的章节信息,包括¥,选择相应的章节列表,通过id传参,找到该章节内容。
章节列表流程如下图所示。
图5-10章节列表流程
章节列表界面如下图所示。
图5-11章节列表界面
章节列表的主要逻辑代码:
<mapper namespace="com.project.demo.dao.base.BaseMapper">
<select id="selectBaseList" resultType="java.util.LinkedHashMap">
${select}
</select>
<select id="selectBaseCount" resultType="Integer">
${count}
</select>
<select id="selectBaseOne" resultType="Object">
${select}
</select>
<update id="updateBaseSql">
${sql}
</update>
<delete id="deleteBaseSql">
${sql}
</delete>
</mapper>
管理员对系统用户的管理,在yhzhgl.Java实现管理员用户的管理,包括录入、删除、修改,修改密码通过SESSION获取用户名,然后输入新密码,提交到mod.Java中,使用sql命令更新密码。
管理员用户管理的界面如下图所示。
图5-12管理员用户管理界面
用户管理的逻辑代码如下。
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
-
-
- 小说管理模块
-
管理员在xiaoshuoxinxi_add.Java发布小说,跳转至小说添加表单,提交小说信息,包括小说编号、书名、小说类别、作者、封面等,小说提交后,数据库的小说信息表刷新数据,系统将小说信息展示出来。
小说管理的流程如所示。
图5-13小说管理流程
小说分类的界面如所示。
图5-14小说分类界面
小说创作管理的界面如所示。
图5-15小说创作管理界面
小说创作管理的逻辑代码如下。
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
-
-
- 免费专区管理模块
-
免费专区管理包括新增、删除、修改、查询免费专区等,以免费专区新增为例,在视图层请求免费专区信息新增,反馈后,调用业务逻辑层,通过业务逻辑层的接口调用底层的数据逻辑层完成数据库联动操作。
免费专区管理的流程如所示。
图5-16免费专区管理流程
免费专区添加的界面如所示。
图5-17免费专区添加界面
免费专区管理的界面如所示。
图5-18免费专区管理界面
在这个产品被投入使用前,首先需要进行试用,这是重要的环节。考虑到某个部分的开发没有缺陷情况下,把各种模块拼接,也有一定概率就存在矛盾。这就好比每个人都很独特,但聚在一起就显得杂乱无章,需要保证有默契的配合。对于测试,要看它的各项内容是否契合的原则。若与最初定下的标准有一定程度上的出入,那么就需要做出一些调整,让最终的大方向朝着目标前进。
登录测试用例如下表所示。
表6-1登录测试用例
输入 |
输出 |
|
用户名 |
密码 |
|
空 |
空 |
用户名和密码不能为空 |
Kkk |
aaa |
用户名长度不允许,请重新输入! |
2109402315 |
123456 |
用户名出错,请重新输入! |
sssss |
123456 |
用户名出错,请重新输入! |
注册测试用例如下表所示。
表6-2注册测试用例
输入 |
输出 |
|||
用户名 |
密码 |
确认密码 |
邮箱 |
|
空 |
空 |
空 |
空 |
用户名和密码不能为空 |
Kkk |
aaa |
aaa |
注册成功 |
|
210 |
aaa |
abc |
注册失败,两次密码不一致 |
|
sssss |
aaa |
aaa |
注册成功 |
-
-
- 评论测试
-
评论测试用例如下表所示。
表6-3评论测试用例
功能 |
测试数据 |
预期结果 |
测试结果 |
添加评论 |
评论内容:asd |
在评论列表中显示评论题目,点击显示评论内容。评论显示为未回答 |
在评论列表中显示评论题目,点击显示评论内容。评论显示为未回答 |
回复评论 |
回答评论:dxvcv。 |
评论列表中评论“asd”显示已回答,点击评论题目,显示评论内容和回答内容 |
评论列表中评论“asd”显示已回答,点击评论题目,显示评论内容和回答内容 |
删除评论 |
删除评论“asd” |
评论成功删除 |
评论成功删除 |
-
-
- 小说管理测试
-
小说测试用例如下表所示。
表6-4添加小说测试用例
输入 |
输出 |
|||
名称 |
类别 |
价格 |
备注 |
|
空 |
空 |
空 |
空 |
添加失败 |
小说1 |
A |
1 |
添加成功 |
|
空 |
A |
1 |
添加失败,名称不能为空 |
|
小说2 |
空 |
1 |
添加失败,请选择类别 |
-
-
- 小说分类测试
-
小说分类测试用例如下表所示。
表6-5小说分类测试用例
输入 |
输出 |
|||
名称 |
类别 |
数量 |
备注 |
|
空 |
空 |
空 |
空 |
添加失败 |
小说1 |
A |
1 |
添加成功 |
|
空 |
A |
1 |
添加失败,名称不能为空 |
|
小说2 |
空 |
1 |
添加失败,请选择类别 |
经过测试,得到测试结果如下表所示。
表6-6测试结果
序号 |
测试项目 |
内容和目的 |
测试结果 |
|
用户登录 |
输入正确用户名与密码 |
可以登录 |
输入错误用户名与密码 |
提示错误的信息 |
||
|
小说资讯管理 (添加,修改,删除) |
输入正确信息 |
成功完成 |
输入错误信息 |
操作失败 |
||
|
修改登录密码 |
修改新的密码 |
成功完成 |
|
用户管理 (添加,修改,删除) |
输入正确信息 |
成功完成 |
输入错误信息 |
操作失败 |
||
|
评论管理 (添加,修改,删除) |
输入正确信息 |
成功完成 |
输入错误信息 |
操作失败 |
||
|
小说分类管理 (添加,修改,删除) |
输入正确信息 |
成功完成 |
输入错误信息 |
操作失败 |
||
|
小说创作管理 (添加,修改,删除) |
输入正确信息 |
成功完成 |
输入错误信息 |
操作失败 |
本次毕业论文的主要是利用Java+Mysql开发一个安全可靠,操作简易,同时具备业务可扩展的网络微小说。本文详细的论述了网络微小说的设计和开发,本系统的所有事务逻辑都是按照系统的需求分析进行设计的,系统有普通用户和系统管理员两种角色,本系统多处采用了AJAX的异步交互技术,同时它也叫异步交互技术,利用它我们可以让网页的局部进行数据刷新操作,AJAX和传统的数据更新技术大大增加了客户的体验程度,由于是对局部进行操作那么就减少了一些繁琐而又不必要的操作,减轻了服务器对页面解析的负担。
与其他系统相比,本系统有自身的优点,
例如:
(1)创新性强;
(2)业务逻辑性强,安全性高,在一些重要的功能模块需要通过审查之后才可使用;
(3)移植性高,在所有window平台都可使用。
当然也还有很多需要进一步改进的地方:
(1)系统大多数页面都是全局刷新,缺乏局部刷新,这将增加服务器的压力,如果有大量用户在同一时间段操作同一个功能模块,可能会导致查询缓慢;
(2)页面没有经过专业的UI设计,美观程度不及其他市场其他网站系统,有待改善。
参考文献
[1]杨孙超.从数字阅读的变迁看待电子墨水屏技术的发展[J].科技资讯,2021,19(03):207-209.
[2]周瑞莺,陈黄焱. 全媒体时代基于电子书阅读器的阅读推广服务探析[C]//中国图书馆学会年会论文集(2020年卷).,2020:336-340.
[3]余丽娜.基于Android的多功能在线阅读的设计与实现[J].信息通信,2019(08):199-200.
[4]祝洁莉,王细荣.掌阅iReader电子阅读器及其打开国内市场分析[J].新闻传播,2019(14):186-187.
[5]陈东升.亚马逊推出全新Kindle电子阅读器[J].计算机与网络,2019,45(07):31.
[6]黄燕妮.Kindle电子书阅读器在公共图书馆的使用情况调查分析——以厦门市图书馆为例[J].四川图书馆学报,2019(05):60-64.
[7]寇惠云.在吸阅读技术发展综述[J].中国高新区,2019(11):16+26.
[8]张洁.电子书阅读界面在移动互联网时代的设计路线[J].数字技术与应用,2019,36(03):147+149.
[9]毛璐娜. 基于多模态信号识别的无障碍电子书阅读器的研究和实现[D].浙江大学,2019.
[10]朱晓宁,王军,郭延红.基于Android下电子书阅读器的技术研究[J].科技视界,2018(33):56+22.
[11]岳贤.互联网大潮下“电纸书”还有人读吗[J].计算机与网络,2018,43(21):18.
[12]余娜.手机+移动互联网大潮下 “电纸书”还有人读吗[J].计算机与网络,2018,43(20):46.
[13]王东.Kindle X咪咕电子书阅读器正式开售[J].计算机与网络,2018,43(18):28.
[14]陈涛.国内电子书阅读器发展现状与前景刍议——以三款电子书阅读器为例[J].山西科技,2018,31(05):95-99.
[15]孙瑞.智能设备中电子阅读APP界面设计研究[J].出版广角,2018(03):49-51.
[16] Kou Huiyun Overview of e-book reader technology development [J] China high tech Zone, 2020 (11): 16 + 26
[17] Zhang Jie モバイルインターネット時代の電子書籍読書インターフェースの設計ルート [J] デジタル技術と応用、2019、36 (03): 147 + 149
ありがとう
数ヶ月の苦労の末、ようやくこの記事を完成させることができましたが、記事を書いたり調べたりする過程で多くの困難に遭遇しましたが、クラスメートや先生の助けを借りて解決しました。特に、私に献身的なご指導とご支援を賜り、また論文の改訂にご尽力いただきました私の最も愛する先生に深く感謝いたします。私は、先生の厳格な学問的態度、深い学術知識、たゆまぬ教育熱心さ、そして寛容な態度から多くの恩恵を受けてきました。また、学校の図書館で資料を探すときも、図書館の先生方がいろいろとサポートしてくださいました。ここに、私を助け、指導してくださった先生方に心から感謝を申し上げます。この記事に関わったすべての学者に感謝します。この記事では複数の学者の文献を引用していますが、さまざまな学者の研究結果の助けとインスピレーションがなければ、この記事を書き上げることは困難でしょう。記事を書く過程でたくさんの資料と援助を与えてくれたほか、記事の執筆と植字の過程でも熱心に助けてくれた私のユニットのクラスメート、友人、同僚に感謝します。同時に、ルームメイトの皆様の熱心なご指導、ご協力に心より感謝申し上げますが、分からないことも多々ありますが、皆さんが助けてくれたおかげで、比較的スムーズに記事を完成させることができました。私のレベルの限界から、私の書いた記事に不備があることは避けられませんので、先生方、生徒の皆様のご批判、ご指摘を心よりお願い申し上げます。
いいね+お気に入り+フォロー→プライベートメッセージでソースコードとデータベースを受け取ります