目次
情報化社会においては、情報の入手手段の絞り込みが求められていますが、基本的には手段の拡大が人々の目指す方向であり、視点の偏りにより、異なる種類の情報を入手することも多くなり、それもまた問題です。テクノロジーが克服するのが最も困難な問題。キャンパス中古プラットフォームなどの課題を踏まえ、コンピュータキャンパス中古プラットフォームの利用方法について調査・分析を行い、問題解決に向けたキャンパス中古プラットフォームの開発・設計を行います。
キャンパス中古プラットフォームの主な機能モジュールには、製品情報、製品分類、注文書、その他の情報保守が含まれており、ソフトウェア開発とハードウェア設置にはオブジェクト指向開発モデルが採用されており、実際の使用とニーズを十分に満たすことができます。ソフトウェア構築やプログラムコーディングにはバックグラウンドデータの主記憶装置としてMySQLを、業務システムのコーディングや開発にはJava技術やAjax技術を活用し、本システムの全機能を実現しています。この報告書はまず研究の背景、役割、意義を分析し、研究作業の合理性の基礎を築きます。キャンパス中古プラットフォームのさまざまなニーズと技術的問題を分析し、システムの必要性と技術的実現可能性を証明し、その後、設計システムで使用する必要がある技術ソフトウェアと設計アイデアの基本的な紹介を行い、最後にキャンパスの中古プラットフォームを実現し、それを使用してデプロイメントを実行します。
キーワード: スプリングブート、キャンパス中古プラットフォーム、MySQL
抽象的な
情報化社会においては、的を絞った情報入手経路が求められますが、その経路の拡大は基本的に人々の努力の方向です。視点のズレにより、人々は異なる種類の情報を入手できることが多く、これはテクノロジーが克服するのが最も難しいテーマでもあります。キャンパス中古プラットフォームなどの問題に対処するために、コンピュータキャンパス中古プラットフォームの使用方法を調査分析し、問題を解決するキャンパス中古プラットフォームを開発および設計します。
キャンパス中古プラットフォームの主な機能モジュールには、製品情報、製品分類、注文書、その他の情報の保守が含まれます。ソフトウェア開発とハードウェアのインストールにはオブジェクト指向開発モデルを採用しており、実際の使用ニーズに効果的に対応できます。対応するソフトウェアのインストールやプログラムのコーディング作業を改善し、バックエンドデータの主記憶装置としてMySQLを採用し、Java技術を採用し、業務システムのコーディングや開発にはAjax技術を採用し、本システムのあらゆる機能を実現します。この報告書では、まず研究の背景、役割、意義を分析し、研究作業の合理性の基礎を築きます。キャンパス中古プラットフォームのさまざまな要件と技術的課題を分析し、システムの必要性と技術的な実現可能性を証明し、システムの設計に必要な技術的なソフトウェアと設計のアイデアについての基本的な紹介を行います。最後に、キャンパス中古プラットフォームを実装し、運用のために展開します。
キーワード:スプリングブーツ;キャンパス中古プラットフォーム;MySQL
1はじめに_
社会の発展に伴い、低炭素経済が今日の世界発展のテーマとなっており、物のリサイクルやリサイクルが社会の注目を集めています。調査によると、大学生の購買力の増大と製品のアップグレードの加速に伴い、大学のキャンパスには書籍、衣類、電子製品などの遊休品が多数存在することが判明した。しかし、一般に、これらの遊休品を処分する便利で効果的な方法が不足しており、その結果、多くの不必要な廃棄物が発生しています。そこで、インターネットを活用した中古品売買サイトを構築することは、この問題を解決する良いアイデアであり、インターネットに熱中する現代の大学生の特性にも応えることができます。キャンパス中古品売買サイトは大学生に特化したサイトであるため、従来の中古品売買サイトに比べて市場の細分化が明確で、よりターゲットを絞ったサービスが提供できるという特徴があり、学生層からの認知を獲得しやすく、利便性が高いです。意識と社会的責任は、広範な経済的利益をもたらすだけでなく、広範囲にわたる社会的利益ももたらします。
新しいタイプの電子商取引であるキャンパス電子商取引とは、キャンパスの範囲内で教師と学生にサービスを提供し、キャンパスのネットワークに依存し、キャンパス内のユニット、企業、または個人のニーズを満たすために学生によって独立して運営されることを指します。ビジネス、仕事、勉強など、生活のあらゆる場面で必要とされるビジネスフォームであり、範囲が狭く、信頼性が高く、操作性が高いという特徴があります。また、消費者のさまざまな製品需要のタイプに応じて、さまざまなキャンパス電子商取引 Web サイトを構築できます。そこで私たちは、学生の中古品ニーズを満たす小規模な中古品取引サイトを構築したいと考えています。
1.2 開発状況
我が国のソフトウェア産業は他国に比べて比較的遅れており、情報化構築の開始も比較的遅れていますが、我が国経済の継続的な発展とネットワーク技術の継続的な向上に伴い、我が国もソフトウェア産業を常に模索し続けています。我が国のソフトウェア産業は急速に発展し、ますます多くのソフトウェア システムが人々の目の前に現れ、人々の生活や働き方を徐々に変えてきました。しかし、情報化の構築に関しては、多くの先進国に比べて、情報化の後進性と資金不足のため、中国のキャンパス中古プラットフォームの開発は依然として相対的に遅れており、我々は引き続き探究と努力を続けなければならない。キャンパス中古プラットフォームの情報化を実現するための実用的な情報ベースのキャンパス中古プラットフォームを開発する。したがって、このトピックでは、キャンパス中古プラットフォームを例として、実用的なキャンパス中古プラットフォームを開発することを目的としています。
キャンパス中古プラットフォームは、Java言語、スプリングブートフレームワーク、およびMySQLデータベースサポートを使用してウェブサイトシステムの開発を共同で完了し、キャンパス中古プラットフォームの情報化を実現し、ユーザーは非常に優れたキャンパス中古プラットフォーム体験を得ることができます。システムはより便利な管理操作を実行し、事前に指定された計画を実現します。
1.3スプリングブートフレームワークの概要
Spring フレームワークは、Java プラットフォーム上のオープン ソース アプリケーション フレームワークであり、コンテナに制御反転特性を提供します。Spring フレームワーク自体にはプログラミング モデルに制限はありませんが、Java アプリケーションで頻繁に使用されるため非常に人気があり、後にEJB (Enterprise JavaBeans) モデルの補足として、または代替として使用されるようになりました。Spring フレームワークは、制御の反転のコア機能の利用や、管理対象オブジェクトのライフサイクルのコンテナ化を実装するための依存関係注入による制御の反転の実装、宣言型トランザクション管理のためのアスペクト指向プログラミングの使用など、開発のための一連のソリューションを提供します。統合 さまざまな永続化テクノロジによってデータ アクセスが管理され、開発を容易にする多数の優れた Web フレームワークが提供されます。Spring フレームワークには Inversion of Control (IOC) 機能があり、プロジェクトのメンテナンスとテストを容易にするように設計されており、Java のリフレクション メカニズムを通じて Java オブジェクトの統合設定と管理の方法を提供します。Spring フレームワークは、コンテナを使用してオブジェクトのライフ サイクルを管理します。コンテナは、XML ファイルまたはクラスの特定の Java アノテーションをスキャンすることでオブジェクトを構成できます。開発者は、依存関係の検索または依存関係の注入を通じてオブジェクトを取得できます。Springフレームワークにはアスペクト指向プログラミングがある(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、ApacheCayne などのすべての一般的なデータ アクセス フレームワークのサポートを提供するだけでなく、Spring のトランザクション管理と併用してデータ アクセスを提供することもできます。 。Spring フレームワークは当初、独自の Web MVC フレームワークを構築するつもりはありませんでした。開発プロセス中、その開発者は、既存の StrutsWeb フレームワークのプレゼンテーション層とリクエスト処理層の間、およびリクエスト処理層とリクエスト処理層の間の分離が必要であると考えていました。モデルだけでは十分ではなかったので、SpringMVC を作成しました。
1.4 論文構成と章の配置
この記事は 6 つの章に分かれており、章の構成は次のとおりです。
第 1 章は序章であり、このシステムが設計・実装された背景、状況、意義について詳しく考察・説明するとともに、論文全体の枠組みの構造を簡単に紹介します。
第 2 章はシステム要件分析です。この章で行われる主な作業は、システムの技術的、経済的、および運用上の実現可能性を分析することです。また、システムの全体的な機能要件とユースケースも分析します。
第 3 章はシステムの設計であり、主にシステムの機能構造を設計し、システム データベースの概念構造と物理構造設計を分析します。
第 4 章はシステムの実装についてであり、システムの機能分割に応じて、システムが実現すべきフロントエンドの一般ユーザー機能とバックエンドの管理者機能をそれぞれ分析して説明します。
第 5 章: システムのテスト。主にシステムの一部のインターフェースをテストし、主要な機能をテストします
2 キャンパス中古プラットフォームシステムの分析
システム要件分析はシステム開発における重要なリンクであり、システムの設計と実装を結び付ける役割を果たします。システム要件分析とは、構築すべきシステムの要件を掘り出すことであり、分析が正確であれば、現実に発生する問題を正確に解決することができます。分析が適切に行われていない場合、後のシステムの実装に影響します。システムの優秀さの中で要求分析が占める割合も非常に大きく、要求分析ができていないとその後のシステム設計はナビゲーションから外れた設計になってしまいます。
システム実現可能性分析は、システムの実現可能性についての議論です。制度の実現可能性を議論する際には、主に技術的実現可能性、経済的実現可能性、法的実現可能性の3つの観点から分析し、この3つのレベルをクリアすれば、比較的実現可能であると考えています。
2.1.1技術的実現可能性分析
キャンパスの中古プラットフォームでは、ストレージに mysql データベースが使用され、開発にはIDEAや Tomcatなどの開発ツールが使用され、執筆作業に大きな利便性をもたらします。このシステムはspringbootフレームワークを使用して開発されており、システムのスケーラビリティと保守性が向上し、Java構成コードが削減され、プログラミング コードが簡素化され、現在、springboot フレームワークは多くの企業に選ばれているフレームワークの 1 つです。
経済的な実現可能性の観点から、このプロジェクトには開発段階では開発用 PC が必要であり、本番段階では Web サーバーとデータベース サーバーが必要です。経済的な観点から見ても、個人用の PC はそれほど問題にはならず、その後のシステム導入や生産を考えると、サーバーへの投資もそれほど高額ではなく、経済的な観点からも比較的実現可能です。
法的な観点から見ると、このシステムにはサードパーティとの間にその他の法的問題はありません。システム データベースは Mysql オープン ソース コミュニティ データベースを使用し、フレームワークはオープン ソースのスプリングブートを使用します。システム情報および関連コンテンツも合法です。ソースコードはgitオープンソースで管理されているため、合法的に実行可能です。
私はキャンパス中古プラットフォームを管理者モジュール、販売者ユーザーモジュール、一般ユーザーモジュールの3つの部分に分けています。
一般ユーザー管理モジュール:
(1) ユーザー登録とログイン:いつでもシステムにアクセスし、システム内の情報を閲覧することができますが、製品情報を操作するには、本システムのアカウントが必要です。では、ユーザーとして登録して関連する操作を行うことができると同時に、「マイアカウント」ボタンを通じて個人情報や操作情報を管理することもできます。
(2) キャンパス中古プラットフォームのホームページ情報を確認する:キャンパス中古プラットフォームのホームページ情報には、掲示板、取引情報、取引情報、製品情報、私のアカウント(私のアカウント、私のコレクション、個人センター)が含まれます。 。
(3) 取引情報: ユーザーが「取引情報」メニューボタンをクリックすると、管理者がバックグラウンドで公開しているすべての取引情報が表示され、詳細の閲覧、収集、いいね、コメントなどが可能です。
(4) 掲示板:バックエンド管理者が投稿する掲示板を閲覧することができ、知りたい掲示板を見つけた場合は、そこに入り詳細な紹介文を閲覧することができます。
(5) 製品情報: ユーザーが「製品情報」メニューボタンをクリックすると、管理者がバックグラウンドで公開しているすべての製品情報が表示されます。キーワードによる製品情報の検索をサポートします。必要な製品情報を選択してクリックして入力します。製品情報の詳細な導入インターフェース 詳細インターフェースでは、製品名、製品タイプ、製品仕様、取引場所、販売者ユーザー、販売者名などの製品情報を表示することができ、同時に購入することができます。 、いいね、収集、コメント。
(6) 購入:商品情報詳細画面で購入したい場合は、下の「購入する」ボタンをクリックすると購入情報入力画面にジャンプしますので、画面の指示に従って購入情報を入力し、「購入」ボタンをクリックしてください。 「送信」ボタンを押すと購入が完了します。
(7) マイアカウント:右上の「マイ」ボタンをクリックするとサブメニューが表示され、個人情報やシステムにログインするためのパスワード、自分で収集した情報などを設定・管理することができます。 ;
管理者管理モジュール:
管理者には管理者と一般利用者があり、管理者は最高の権限を持ち、学内中古プラットフォームの情報の追加、削除、変更、確認を行うことができます。
(1) カルーセル画像:管理者は、「カルーセル画像」メニューをクリックして、ホームページに表示されるカルーセル画像の追加、削除、変更、確認を行うことができます。
(2) 掲示板: 管理者は、[掲示板] メニューをクリックしてシステム内のすべての掲示板情報を表示し、既存の掲示板を変更したり、新しい掲示板を追加したり、掲示板を削除したりできます。
(3) システムユーザー: 管理者が「システムユーザー」メニューをクリックすると、管理者、販売者ユーザー、一般ユーザーの 3 つのサブメニューが表示され、これら 3 つの役割の情報の追加、削除、変更、確認を行うことができます。
(4)リソース管理: 管理者が「リソース管理」メニューをクリックすると、トランザクション情報と情報分類の 2 つのサブメニューが表示されます。管理者は、フロントエンド ユーザーにより良いサービスを提供するために、これら 2 つの部門に関係する機能を更新および維持できます。
(5) モジュール管理:「モジュール管理」メニューでは、製品分類、製品情報、発注書など、一般ユーザーおよび販売者ユーザーがシステム内で操作するあらゆる情報を管理できます。
2.2.2 非機能分析
キャンパス中古プラットフォームの非機能要件には、キャンパス中古プラットフォームのセキュリティ、信頼性、パフォーマンス、拡張性などが含まれます。詳細は次の 3-1 表で表すことができます。
表3-1キャンパス中古プラットフォームの非機能要件表
安全性 |
主にキャンパス中古プラットフォームデータベースの設置を指し、データベースの使用とパスワードの設定は標準に準拠する必要があります。 |
信頼性 |
信頼性とは、キャンパス中古プラットフォームがユーザーの指示に従って動作することを意味し、テスト後の信頼性は90%以上です。 |
パフォーマンス |
キャンパスの中古プラットフォームが市場を占めるには性能が必須条件であり、性能が良いことが最善です。 |
スケーラビリティ |
たとえば、データベースは、システムの非機能要件を確実に満たすために、インターフェイスの使用などの複数の属性を予約します。 |
使いやすさ |
利用者は学内中古プラットフォームのページ表示内容に従って操作するだけで済みます。 |
保守性 |
キャンパス中古プラットフォームの開発は保守性が非常に重要ですが、テスト後も保守性に問題はありません。 |
2.3システムのユースケース分析
キャンパス中古プラットフォームの完全な UML ユースケース図は、それぞれ図 2-1 と図 2-2 です。
図 2-1 は、通常のユーザーの役割の使用例を示しています。
図 2-1 キャンパス中古プラットフォームにおける一般ユーザーの役割のユースケース図
図 2-2 は、管理者の役割の使用例を示しています。
図 2-2 キャンパスの中古プラットフォーム管理者の役割のユースケース図
2.4.1データの流れ
キャンパス中古プラットフォーム開発の主な目的の 1 つは、ユーザーが製品情報を購入できるようにすることです (図 2-3 はシステムのデータ フロー図です)。
図2-3 製品情報購入操作の展開図
2.4.2 ビジネスプロセス
キャンパス中古プラットフォームのデータ フローを分析した後、システムのビジネス プロセスを見てみましょう。図 2-4 はビジネス フロー チャートです。
2.5 この章の概要
本章では主に、キャンパス中古プラットフォームの実現可能性分析、機能要件分析、システムユースケース分析、システムプロセス分析を通じて、キャンパス中古プラットフォーム全体で実現すべき機能を決定します。同時に、コードの実装とキャンパスの中古プラットフォームのテストの標準も提供します。
この章で説明する主な内容には、キャンパス中古プラットフォームの機能モジュール設計とデータベース システム設計が含まれます。
3.1システム機能モジュールの設計
前章では主にシステムの機能要件と非機能要件を分析し、その要件に基づいて本キャンパスの中古プラットフォームのユースケースを分析しました。次に、このキャンパスの中古プラットフォームのアーキテクチャ、主要な機能、データベースの設計を開始します。キャンパス中古プラットフォームは、前章の需要分析に基づいて導出され、その全体的な設計モジュール図を図 3-1 に示します。
図 3-1 キャンパス中古プラットフォーム機能モジュール図
3.1.2ユーザーモジュールの設計
本システムの利用者には管理者と利用者がいます. 2つの利用者モジュールの機能は基本的に同じです. 利用者は管理者に比べて登録機能が1つ多いため, 分析例として利用者モジュールの構造図を使用します.モジュール構造図は分析の例として使用されます。以下に示すように:
図 3-2 ユーザーモジュールの構成図
3.1.3コメント管理モジュールの設計
キャンパス中古プラットフォームはオープンなコミュニケーションプラットフォームであり、ユーザーがコメントを投稿することでユーザー間の交流を促進します。しかし同時に、コメントの内容をより標準化し、管理者に不適切なコメントを削除する機能を提供するには、コメント管理モジュールを特別に設計する必要があり、具体的な構造図は次のとおりです。
図3-3 コメント管理モジュールの構成図
3.1.4製品管理モジュールの設計
キャンパス中古プラットフォームには多くの製品情報を保存する必要があり、そのモジュール機能構造は次のとおりです。
図 3-4 製品モジュール構造図
データベースの設計は、一般に需要分析、概念モデル設計、データベーステーブル作成の3つの大きなプロセスから構成されますが、需要分析については前章で説明しましたが、概念モデル設計は概念モデルと論理構造設計の2つに分かれます。
3.2.1データベースの概念構造設計
以下は、キャンパス中古プラットフォーム全体の主要なデータベース テーブルの主要な ER エンティティ関係図です。
図 3-6 キャンパス中古プラットフォームのトータル ER 関係図
前セクションのキャンパス中古プラットフォームの全体的な ER 関係図から、合計で多くのデータ テーブルを作成する必要があると結論付けることができます。ここでは主に、いくつかの主要なデータベース テーブル構造設計をリストします。
テーブル収集 (コレクション)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
収集ID |
整数 |
10 |
0 |
N |
Y |
コレクションID: |
|
2 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
コレクターID: |
3 |
ソーステーブル |
可変長文字 |
255 |
0 |
Y |
N |
ソーステーブル: |
|
4 |
ソースフィールド |
可変長文字 |
255 |
0 |
Y |
N |
ソースフィールド: |
|
5 |
ソースID |
整数 |
10 |
0 |
N |
N |
0 |
ソースID: |
6 |
タイトル |
可変長文字 |
255 |
0 |
Y |
N |
タイトル: |
|
7 |
画像 |
可変長文字 |
255 |
0 |
Y |
N |
カバー: |
|
8 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
9 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
テーブルコメント(コメント)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
コメントID |
整数 |
10 |
0 |
N |
Y |
コメントID: |
|
2 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
コメント投稿者ID: |
3 |
Reply_to_id |
整数 |
10 |
0 |
N |
N |
0 |
返信コメントID: 空は0 |
4 |
コンテンツ |
長文 |
2147483647 |
0 |
Y |
N |
コンテンツ: |
|
5 |
ニックネーム |
可変長文字 |
255 |
0 |
Y |
N |
ニックネーム: |
|
6 |
アバター |
可変長文字 |
255 |
0 |
Y |
N |
アバターアドレス: [0,255] |
|
7 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
8 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
9 |
ソーステーブル |
可変長文字 |
255 |
0 |
Y |
N |
ソーステーブル: |
|
10 |
ソースフィールド |
可変長文字 |
255 |
0 |
Y |
N |
ソースフィールド: |
|
11 |
ソースID |
整数 |
10 |
0 |
N |
N |
0 |
ソースID: |
テーブル commodity_classification (商品分類)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
商品分類ID |
整数 |
10 |
0 |
N |
Y |
製品カテゴリID |
|
2 |
製品の種類 |
可変長文字 |
64 |
0 |
Y |
N |
製品タイプ |
|
3 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
4 |
作成時間 |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表hits (用户点击)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
hits_id |
int |
10 |
0 |
N |
Y |
点赞ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
点赞人: |
3 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
来源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
来源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
来源ID: |
表notice (公告)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
notice_id |
mediumint |
8 |
0 |
N |
Y |
公告id: |
|
2 |
title |
varchar |
125 |
0 |
N |
N |
标题: |
|
3 |
content |
longtext |
2147483647 |
0 |
Y |
N |
正文: |
|
4 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
表ordinary_users (普通用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
ordinary_users_id |
int |
10 |
0 |
N |
Y |
普通用户ID |
|
2 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户姓名 |
|
3 |
gender |
varchar |
64 |
0 |
Y |
N |
性别 |
|
4 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
5 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
6 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表praise (点赞)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
praise_id |
int |
10 |
0 |
N |
Y |
点赞ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
点赞人: |
3 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
来源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
来源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
来源ID: |
8 |
status |
bit |
1 |
0 |
N |
N |
1 |
点赞状态:1为点赞,0已取消 |
表product_information (商品信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
product_information_id |
int |
10 |
0 |
N |
Y |
商品信息ID |
|
2 |
trade_name |
varchar |
64 |
0 |
Y |
N |
商品名称 |
|
3 |
product_type |
varchar |
64 |
0 |
Y |
N |
商品类型 |
|
4 |
product_image |
varchar |
255 |
0 |
Y |
N |
商品图片 |
|
5 |
product_specifications |
varchar |
64 |
0 |
Y |
N |
商品规格 |
|
6 |
commodity_price |
varchar |
64 |
0 |
Y |
N |
商品价格 |
|
7 |
place_of_transaction |
varchar |
64 |
0 |
Y |
N |
交易地点 |
|
8 |
seller_customers |
int |
10 |
0 |
Y |
N |
0 |
卖家用户 |
9 |
seller_name |
varchar |
64 |
0 |
Y |
N |
卖家姓名 |
|
10 |
product_details |
longtext |
2147483647 |
0 |
Y |
N |
商品详情 |
|
11 |
hits |
int |
10 |
0 |
N |
N |
0 |
点击数 |
12 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
点赞数 |
13 |
examine_state |
varchar |
16 |
0 |
N |
N |
未审核 |
审核状态 |
14 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
15 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
16 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表purchase_order (购买订单)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
purchase_order_id |
int |
10 |
0 |
N |
Y |
购买订单ID |
|
2 |
trade_name |
varchar |
64 |
0 |
Y |
N |
商品名称 |
|
3 |
product_type |
varchar |
64 |
0 |
Y |
N |
商品类型 |
|
4 |
product_specifications |
varchar |
64 |
0 |
Y |
N |
商品规格 |
|
5 |
commodity_price |
varchar |
64 |
0 |
Y |
N |
商品价格 |
|
6 |
place_of_transaction |
varchar |
64 |
0 |
Y |
N |
交易地点 |
|
7 |
seller_customers |
int |
10 |
0 |
Y |
N |
0 |
卖家用户 |
8 |
sellers_name |
varchar |
64 |
0 |
Y |
N |
卖家姓名 |
|
9 |
purchase_user |
int |
10 |
0 |
Y |
N |
0 |
购买用户 |
10 |
user_name |
varchar |
64 |
0 |
Y |
N |
用户姓名 |
|
11 |
users_mobile_phone |
varchar |
64 |
0 |
Y |
N |
用户手机 |
|
12 |
scheduled_transaction_time |
datetime |
19 |
0 |
Y |
N |
预定交易时间 |
|
13 |
pay_state |
varchar |
16 |
0 |
N |
N |
未支付 |
支付状态 |
14 |
pay_type |
varchar |
16 |
0 |
Y |
N |
支付类型: 微信、支付宝、网银 |
|
15 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
16 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
17 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表seller_customers (卖家用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
seller_customers_id |
int |
10 |
0 |
N |
Y |
卖家用户ID |
|
2 |
seller_name |
varchar |
64 |
0 |
Y |
N |
卖家姓名 |
|
3 |
seller_gender |
varchar |
64 |
0 |
Y |
N |
卖家性别 |
|
4 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
5 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
6 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表slides (轮播图)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
slides_id |
int |
10 |
0 |
N |
Y |
轮播图ID: |
|
2 |
title |
varchar |
64 |
0 |
Y |
N |
标题: |
|
3 |
content |
varchar |
255 |
0 |
Y |
N |
内容: |
|
4 |
url |
varchar |
255 |
0 |
Y |
N |
链接: |
|
5 |
img |
varchar |
255 |
0 |
Y |
N |
轮播图: |
|
6 |
hits |
int |
10 |
0 |
N |
N |
0 |
点击量: |
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
表upload (文件上传)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
upload_id |
int |
10 |
0 |
N |
Y |
上传ID |
|
2 |
name |
varchar |
64 |
0 |
Y |
N |
文件名 |
|
3 |
path |
varchar |
255 |
0 |
Y |
N |
访问路径 |
|
4 |
file |
varchar |
255 |
0 |
Y |
N |
文件路径 |
|
5 |
display |
varchar |
255 |
0 |
Y |
N |
显示顺序 |
|
6 |
father_id |
int |
10 |
0 |
Y |
N |
0 |
父级ID |
7 |
dir |
varchar |
255 |
0 |
Y |
N |
文件夹 |
|
8 |
type |
varchar |
32 |
0 |
Y |
N |
文件类型 |
表user (用户账户:用于保存用户登录信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
user_id |
mediumint |
8 |
0 |
N |
Y |
用户ID:[0,8388607]用户获取其他与用户相关的数据 |
|
2 |
state |
smallint |
5 |
0 |
N |
N |
1 |
账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 |
user_group |
varchar |
32 |
0 |
Y |
N |
所在用户组:[0,32767]决定用户身份和权限 |
|
4 |
login_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
上次登录时间: |
5 |
phone |
varchar |
11 |
0 |
Y |
N |
手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 |
|
6 |
phone_state |
smallint |
5 |
0 |
N |
N |
0 |
手机认证:[0,1](0未认证|1审核中|2已认证) |
7 |
username |
varchar |
16 |
0 |
N |
N |
用户名:[0,16]用户登录时所用的账户名称 |
|
8 |
nickname |
varchar |
16 |
0 |
Y |
N |
昵称:[0,16] |
|
9 |
password |
varchar |
64 |
0 |
N |
N |
密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 |
|
10 |
|
varchar |
64 |
0 |
Y |
N |
邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 |
|
11 |
email_state |
smallint |
5 |
0 |
N |
N |
0 |
邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 |
avatar |
varchar |
255 |
0 |
Y |
N |
头像地址:[0,255] |
|
13 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
表user_group (用户组:用于用户前端身份和鉴权)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
group_id |
mediumint |
8 |
0 |
N |
Y |
用户组ID:[0,8388607] |
|
2 |
display |
smallint |
5 |
0 |
N |
N |
100 |
显示顺序:[0,1000] |
3 |
name |
varchar |
16 |
0 |
N |
N |
名称:[0,16] |
|
4 |
description |
varchar |
255 |
0 |
Y |
N |
描述:[0,255]描述该用户组的特点或权限范围 |
|
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
来源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
来源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
来源ID: |
8 |
register |
smallint |
5 |
0 |
Y |
N |
0 |
注册位置: |
9 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间: |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间: |
3.4本章小结
整个校园二手平台的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 校园二手平台详细设计与实现
校园二手平台的详细设计与实现主要是根据前面的校园二手平台的需求分析和校园二手平台的总体设计来设计页面并实现业务逻辑。主要从校园二手平台界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入校园二手平台的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是公告,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 用户注册界面
校园二手平台的用户时可以进行注册登录,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。
图4-2注册界面图
注册逻辑代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
4.1.3 用户登录界面
校园二手平台中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到校园二手平台的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
登录的逻辑代码如下所示。
/**
* 登录
* @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;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}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.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
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, "账号或密码不正确");
}
}
4.1.4商品信息界面
当用户点击“商品信息”这一菜单按钮,会显示管理员在后台发布的所有的商品信息,支持通过关键词对商品信息进行搜索,选择需要的商品信息点击可以进入到商品信息详细的介绍界面,在详细界面可以查看到商品信息的商品名称、商品类型、商品规格、商品价格、交易地点、卖家用户、卖家姓名等信息,同时可以进行购买、点赞、收藏、评论操作,商品信息界面如下图4-4所示。
图4-4 商品信息界面图
商品信息的逻辑代码如下:
@PostMapping("/add")
@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);
}
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){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
4.1.5购买界面
当用户在商品信息详情界面想要进行购买,点击下方的“购买”按钮,就会跳转到购买信息填写界面,根据界面提示输入购买信息,点击“提交”按钮,购买就完成了,购买界面如下图4-5所示。
图4-5购买界面图
4.1.6交易资讯界面
当访客点击校园二手平台中导航栏上的“交易资讯”后将会进入到该“交易资讯”列表的界面,然后选择想要看的交易资讯,点击进入到详细界面,同时可以进行点赞、收藏、评论操作,交易资讯界面如下图4-6所示。
图4-6 交易资讯界面图
4.2管理人员功能模块
管理员点击“公告栏管理”菜单可以查看到系统中的所有公告栏信息,对已经存在的公告栏,管理员可以修改,也可以添加新的公告栏或者删除公告栏。界面如下图4-7所示。
图4-7公告栏管理界面图
4.2.2 资源管理界面
资源管理主要管理员是对交易资讯以及交易资讯所属的分类进行管控,包含了用户对交易资讯提交的评论信息,界面如下图4-8所示。
图4-8资源管理界面图
资源管理界面逻辑代码如下:
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.2.3系统用户管理界面
管理员点击“系统用户”菜单可以对系统中存在的用户进行管理,包含了管理员用户、卖家和普通用户。界面如下图4-9所示。
图4-9系统用户管理界面图
管理员点击“商品信息”会显示出所有的商品信息,支持选择商品名称或者商品类型对商品信息进行查询,如果想要添加新的商品信息,点击“添加”按钮,输入商品名称、商品类型、商品图片、商品规格、交易地点、卖家用户、卖家姓名等信息,点击“提交”按钮就可以添加了,同时可以选择某一条商品信息,点击“删除”进行删除,也可以对用户提交的商品信息评论的信息进行管控。界面如下图4-10所示。
图4-10商品信息管理界面图
商品信息管理逻辑代码如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.2.5购买订单管理界面
管理员点击“购买订单”会显示出所有的购买订单信息,支持输入商品名称或者商品类型对购买订单信息进行查询,如果想要添加新的购买订单信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条购买订单信息,点击“删除”进行删除,也可以点击后面的“支付”按钮对购买订单的支付信息进行设置。界面如下图4-11所示。
图4-11购买订单管理界面图
购买订单管理界面逻辑代码如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
public Map<String,String> readConfig(HttpServletRequest request){
Map<String,String> map = new HashMap<>();
map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));
return map;
}
public Map<String,String> readQuery(HttpServletRequest request){
String queryString = request.getQueryString();
if (queryString != null && !"".equals(queryString)) {
String[] querys = queryString.split("&");
Map<String, String> map = new HashMap<>();
for (String query : querys) {
String[] q = query.split("=");
map.put(q[0], q[1]);
}
map.remove(FindConfig.PAGE);
map.remove(FindConfig.SIZE);
map.remove(FindConfig.LIKE);
map.remove(FindConfig.ORDER_BY);
map.remove(FindConfig.FIELD);
map.remove(FindConfig.GROUP_BY);
map.remove(FindConfig.MAX_);
map.remove(FindConfig.MIN_);
return map;
}else {
return new HashMap<>();
}
}
@Transactional
public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){
StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
}else {
sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
}
}
sql.deleteCharAt(sql.length()-1);
sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));
log.info("[{}] - 更新操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
public String toWhereSql(Map<String,String> query, Boolean like) {
if (query.size() > 0) {
try {
StringBuilder sql = new StringBuilder(" WHERE ");
for (Map.Entry<String, String> entry : query.entrySet()) {
if (entry.getKey().contains(FindConfig.MIN_)) {
String min = humpToLine(entry.getKey()).replace("_min", "");
sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
continue;
}
if (entry.getKey().contains(FindConfig.MAX_)) {
String max = humpToLine(entry.getKey()).replace("_max", "");
sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
continue;
}
if (like == true) {
sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");
} else {
sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");
}
}
sql.delete(sql.length() - 4, sql.length());
sql.append(" ");
return sql.toString();
} catch (UnsupportedEncodingException e) {
log.info("拼接sql 失败:{}", e.getMessage());
}
}
return "";
}
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、商品展示功能测试、商品添加、商品搜索、密码修改,如表5-1、5-2、5-3、5-4、5-5所示:
表5-1 用户登录功能测试表
用例名称 |
用户登录系统 |
目的 |
测试用户通过正确的用户名和密码可否登录功能 |
前提 |
未登录的情况下 |
测试流程 |
1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 |
用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 |
实际结果与预期结果一致 |
商品查看功能测试:
表5-2 商品查看功能测试表
用例名称 |
商品查看 |
目的 |
测试商品查看功能 |
前提 |
无 |
测试流程 |
点击商品 |
预期结果 |
可以查看到所有商品 |
实际结果 |
实际结果与预期结果一致 |
管理员添加商品界面测试:
表5-3 管理员添加商品界面测试表
用例名称 |
添加商品测试用例 |
目的 |
测试商品添加功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员点击商品,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 |
提交以后,页面首页会显示新的商品 |
实际结果 |
实际结果与预期结果一致 |
商品搜索功能测试:
表5-4商品搜索功能测试表
用例名称 |
商品搜索测试 |
目的 |
测试商品搜索功能 |
前提 |
无 |
测试流程 |
1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 |
页面显示包含有搜索关键字的商品 |
实际结果 |
实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-5 密码修改功能测试表
用例名称 |
密码修改测试用例 |
目的 |
测试管理员密码修改功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 |
使用新的密码可以登录 |
实际结果 |
实际结果与预期结果一致 |
通过编写校园二手平台的测试用例,已经检测完毕用户登录模块、商品展示模块、商品添加模块、商品搜索模块、密码修改模块,通过这五大模块为校园二手平台的后期推广运营提供了强力的技术支撑。
结论
至此,校园二手平台已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、Java技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
[1]佟羽齐,刘德华,张栎柯,李剑波,张俊杰.基于SpringBoot框架的钻前管理系统的设计与实现[J].信息与电脑(理论版),2023,35(02):111-113.
[2]曹振兴,刘亚娇,邹敏,涂蓉蓉,刘键铮.绿色校园背景下的校园二手交易平台[J].数字通信世界,2023(01):75-77.
[3]高耀,许诺,李博,王国帧.基于Web的新型校园二手交易平台实践研究——以“校易集市”为例[J].中国商论,2023(01):130-132.DOI:10.19699/j.cnki.issn2096-0298.2023.01.130.
[4]张柱,宋存进,蒋乐,刘莉.基于微信小程序校园二手交易平台设计与开发[J].电脑编程技巧与维护,2022(12):59-61+142.DOI:10.16184/j.cnki.comprg.2022.12.035.
[5]刘玥垚,曾姿琪,彭佳慧等. 浅析大学校园二手图书资源循环使用的网络平台建设的必要[C]//中国管理科学研究院教育科学研究所.2022电脑校园网络论坛论文集.2022电脑校园网络论坛论文集,2022:155-157.DOI:10.26914/c.cnkihy.2022.025230.
[6]王曼维,杨荻,李岩,及松洁.基于SpringBoot框架的智慧医疗问诊系统设计与实现[J].中国医学装备,2022,19(03):133-136.
[7]肖佳欣,李雪,曲嵬琦.基于新媒体营销搭建校园二手交易平台的策略研究[J].营销界,2022(01):35-37.
[8]王百皓,王生辉,祝玉华,李智慧. 一种基于MVC框架的智能平台的校园二手交易系统[P]. 河南省:CN113781185A,2021-12-10.
[9]高志平. 基于SpringBoot框架与ITIL方法的运维管理系统的设计与实现[D].华东师范大学,2021.DOI:10.27149/d.cnki.ghdsu.2021.001482.
[10]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).
[11]胡思思,马诗豪,姜美.绿色校园背景下的校园二手交易平台[J].现代商业,2021(23):33-35.DOI:10.14097/j.cnki.5392/2021.23.011.
[12]余紫燕,姚芷晴,韦龄祺,彭秋明,梁玮澄,杨奕楷.关于构建校园二手交易平台的研究[J].北方经贸,2021(06):69-71.
[13]刘欣,李亮亮,牛聪. 基于Vue和SpringBoot框架的流域监管平台的研究和应用[C]//《中国防汛抗旱》杂志社,中国水利学会减灾专业委员会,水利部防洪抗旱减灾工程技术研究中心(中国水利水电科学研究院防洪抗旱减灾研究中心).第十一届防汛抗旱信息化论坛论文集.第十一届防汛抗旱信息化论坛论文集,2021:118-122.DOI:10.26914/c.cnkihy.2021.024864.
[14]陈倩,张捷.校园二手平台开发与市场分析[J].中国商论,2021(05):40-41.DOI:10.19699/j.cnki.issn2096-0298.2021.05.040.
[15]Xi Zeng,Yu Zhou,Xuqi Chen. Study on the System Design of Campus Resource Sharing Platform[J]. E3S Web of Conferences,2021,235.
[16]毕怀奇,王瑞东.校园二手交易平台的构建——以安徽建筑大学为例[J].商讯,2020(20):9-10.
[17]黄天明。JAVAテクノロジーをベースにした法律相談用アプリシステムの設計と実装[J]。プロセディアコンピュータサイエンス、2020、166(C)。
[18] Cui Wei、Yang Jiashuai、Wang Kaiwen、Ren Yihao、Wei Fan. キャンパス中古プラットフォームの市場規模と持続可能な開発方法の分析 [J]. 中国ビジネス理論、2020(01):10-11+ 215.DOI:10.19699 /j.cnki.issn2096-0298.2020.01.010。
[19] Guo Fei、Li Yingjun、Zhang Danhua、Du Zhuoying、「Qianyi」キャンパス中古取引プラットフォームの構築および促進計画 [J]、Economic Research Guide、2019(12):146+149。
ありがとう
この記事を完成させることができたのは、大好きな先生のご協力があったからこそであり、直接的な問題点のご指摘はなかったものの、言葉で指導し、適切なアドバイスをいただき、より早く成長することができましたことを心より感謝申し上げます。 。
まず、作品を完成させた時に大きな肯定をしてくださった講師のおかげで、大きな自信となり、自信を持ってこの作品を完成させることができました。制作過程でもたくさんのアドバイスをいただき、遠回りすることがなくなりました。彼が私に具体的な方向性を示し、主幹を見つけた後、私は主幹の枝を徐々にたどり、それぞれのコンテキストを分析しました。そして、私のシステムが完成した当初、彼は私のシステムの欠点や欠陥を私に指摘し、私自身の欠点を痛感しました。
次に、参考資料を提供してくださったクラスメートの方々にも、先人の経験を教えていただき、巨人の肩の上に立つ原点を与えていただき、大変助けになりました。
最後に、両親に感謝します。両親は私を最大限にサポートし、私の仕事を全面的に肯定してくれました。それが私に大きな励みとなり、私の成功の基礎を築きました。彼らの助けがなければ、私は何もできませんでした」 . 今のような成功はなかっただろう。ご協力いただきありがとうございます。
プロジェクトのソース コードを無料で受け取るには、ブロガーをフォローして「いいね」を押し、プライベート メッセージを送ってください。