現在の中国では、人々の生活の質が徐々に向上し、消費力が増大するにつれて、さまざまな家畜が徐々に人間の生活のより親密なパートナーになってきています。さらに、今日の社会競争は非常に激しく、人々の生活ペースはますます速く、緊張していますが、元気でかわいい小さなペットは、緊張した生活ペースにある人々の心の孤独を解消し、仕事によるプレッシャーを和らげることができます。 . 、生活に楽しみを加えます。しかし、メリットの反面デメリットも多く、野良ペットやペットの感染症などの問題も大きくなるため、ペット愛好家のニーズに応えるだけでなく、ペットの飼育に伴う問題の解決にも貢献できるプラットフォームが求められています。長所と短所。
ペット愛好家がいつでもどこでも病院番号の情報源を知ることができるペット病院予約登録システムです。登録ユーザーはペットの医療サービスなどの予約も簡単に行うことができ、管理者ユーザーも簡単にウェブサイトを管理できる、非常に便利なサービスです。 . ウェブサイト上のさまざまなコンテンツ、カスタマイズ機能は非常に強力です。
この記事では、開発技術としてspringbootを使用して、ペット病院の予約登録システムを実装します。ペット病院予約登録システムの主な利用者は、管理者、ペットの医師、ペットの飼い主に分かれており、主な機能としては、ホームページ、システム利用者(管理者、ペット医師、飼い主)、モジュール管理(ペット情報、医師情報、予約登録、診断レポート、毎日の健康状態、ペットログ、番号源管理)、パーソナルセンターおよびその他の機能。これらの機能モジュールの設計により、基本的にペット病院の予約登録システム全体のプロセスが実現されます。
具体的には、システム設計にスプリングブーツ構造を採用し、バックグラウンドでMysqlデータベースを利用する非常に優れたペット病院の予約登録システムです。
キーワード:ペット病院予約登録システム、スプリングブート技術、Mysqlデータベース
現在の中国では、人々の生活の質が徐々に向上し、消費能力が向上するにつれて、さまざまな飼いならされた小動物が徐々に人間にとってより親密な生活の伴侶になってきています。さらに、今日の社会における競争の激化に伴い、人々の生活ペースはますます速くなり、緊張感が高まっています。活発でかわいい小さなペットは、緊張した生活ペースの中で人々の内なる孤独を解消し、仕事によるプレッシャーを和らげてくれます。生活に楽しみを加えます。しかし、メリットにはデメリットも伴うことが多く、野良ペットやペットの感染症などの問題も潜在的に増大します。そのためには、ペット愛好家のニーズを満たすだけでなく、ペットの飼育に伴う問題の解決にも貢献できるプラットフォームが必要です。
このペット病院の予約および登録システムにより、ペット愛好家はいつでもどこでも病院のアカウント情報にアクセスできます。登録するとペットの医療などの予約も簡単にできるのでとても便利です。管理者ユーザーもWebサイト上のさまざまなコンテンツを簡単に管理でき、カスタマイズ機能も非常に強力です。
この記事では、開発技術として Spring Boot を使用して、ペット病院の予約および登録システムを実装します。ペット病院の予約および登録システムの主なユーザーは、管理者、ペットの医師、ペットの飼い主です。主な機能としては、ホームページ、システム利用者(管理者、ペット医師、飼い主)、モジュール管理(ペット情報、医師情報、予約登録、診断レポート、日々の健康状態、ペットログ、アカウントソース管理)、パーソナルセンターなどがあります。機能。これらの機能モジュールの設計を通じて、ペット病院の予約および登録システムのプロセス全体が基本的に実装されました。
具体的には、システム設計としてスプリングブートの構造を採用し、バックエンドにMySQLデータベースを使用するなど、優れたペット病院の予約・登録システムとなっています。
キーワード:ペット病院の予約・登録システム。スプリングブートテクノロジー。MySQLデータベース
目次
1。概要
1.1 テーマの背景と意義
現在、ペット病院の予約登録システムの多くは、純粋に手動で管理するのが一般的です。この方法の欠点は、経営に携わる人々の文化レベルや筆跡が異なるため、相互に情報を伝達する際に不便が生じること、また、紙の情報伝達媒体は傷つきやすく、情報の漏洩が発生しやすいという大きな弱点がある。損失。情報化時代の今日、どの動物病院でも、ペット病院情報の管理を標準化し、ペット病院の管理レベルを大幅に向上させ、リソースを最適化し、利益を最大化する実用的なペット病院予約登録システムが必要です。
現在、いくつかのペット病院予約登録システム管理ソフトウェアにはさまざまなテクノロジーが使用されていますが、ほとんどのペット病院予約登録システムは主に大規模な動物病院の主要部門で使用されています。小規模な動物病院の場合、日常業務の管理にペット病院予約登録システムを利用しているところは多くありません。ペット病院の予約登録システムソフトウェアに対する基本的かつ膨大なニーズを考慮すると、優れたペット病院の予約登録システムソフトウェアは、十分な機能を備え、操作が簡単で、ユーザーにシンプルで明確な操作インターフェイスを表示する必要があります。機能を向上させる一方で、システムの柔軟性やセキュリティも考慮する必要があります。
ペット病院予約登録システムの利点は主に次の 3 つの側面に反映されます。
(1)ペット病院予約登録システムはペーパーレスで環境に優しく便利です。従来のペット病院の予約登録システムは、従業員によって手動で記録され、アーカイブされていました。この従来の紙によるペット病院の予約登録システムの管理は、多くの体力を消耗し、次に多くのエネルギーを必要とします。ペーパーレスのペット病院予約登録システムは、パソコンの前でマウスをクリックするだけで、物理的エネルギーをほとんど消費せず、従来のペット病院予約登録システムよりも環境保護、効率性、対象となる日常業務の点で優れています。管理ははるかに科学的です。
(2) 科学的管理、安全で信頼できる。従来のペット病院の予約登録システムの管理方法では、さまざまな理由により情報の紛失や改ざんが発生することが多く、ペット病院の予約登録システムや日常業務に多大な不便をもたらしていました。ペット病院予約登録システムに関しては、システムのデータベースがしっかり保護されていれば、上記の問題は容易に解決できます。
(3) 作業の簡素化を図り、その他の面でも総合的な開発を推進する。ペット病院予約登録システムの介入により、医師はより多くの時間を確保して、より的を絞った個別の医療サービスを提供できるようになり、各患者がより多くのサービスを享受する機会が得られます。
1.2 国内外の研究状況
経済の発展に伴い、人々の生活水準は向上し続けており、ペットを飼い始める家庭が増えていると同時に、ペットの衛生、防疫、診断、治療に対する人々の関心も高まっています。 、そしてこれから派生して、新興のペット病院もますます急速に発展しています。
欧米先進国では、ペット病院はすでに産業として国民経済の一部を形成しており、欧米先進国における高度な情報化により、情報技術やさまざまな研究成果がペット病院に応用されています。ペット病院は、あらゆる分野で以前から管理と情報構築が実現されてきました。
現在、情報化が世界的な発展のテーマとなっており、世界各国で情報需要が急速に増大しており、情報製品や情報サービスは、さまざまな国、地域、企業、組織、家庭、個人に広く利用されています。
先進国ではすでに 1980 年代に情報構築の取り組みが始まっていました。現在、欧米の先進国では、ペットの防疫、衛生、安全などにおいて重要な管理役割を果たしているペット電子ファイルがすでに整備されています。同時に、さまざまな新技術が継続的に利用されています。ペット病院の日常管理ペット病院はすでに経営の標準化・標準化を実現しています。
欧米の先進国と比較すると、中国の情報化建設は1990年代初頭から始まっており、情報化の度合いは依然として低く、発展は非常に不均一であり、ほとんどのペット病院の情報化建設は依然として価格設定が中心となっている。他の事業者に比べて情報管理が行き届いていないため、依然として手作業による作業が多く、現在の動物病院の情報管理には多くの問題が生じています。
中国のペット病院業界における IT 応用の継続的な改善により、南東海岸のより発展した都市ではペット病院管理の情報化が実現していますが、完全に普及しているわけではありません。病院は、依然として伝統的な経営スタイルを維持しています。
欧米の先進国との差は依然として大きいものの、中国は「第12次5カ年計画」の中で、~3521情報化プロジェクトを提案しており、中国のペット病院の情報化は、世界の先駆けとなっている。発展の良い機会。
ペット病院の継続的な情報化構築は、ペット医療・健康業界の発展にとって非常に重要であり、ペット病院のサービス品質を向上させるだけでなく、ペット病院の経営を容易にすることができます。伝染病の予防、衛生、安全は非常に重要です。
1.3研究内容
現在、情報管理の主なツールとして従来の紙ツールを使用している人が依然として多く、ネットワーク技術の応用は補助的な役割にすぎません。ネットワーク ツールの認識という点では、従来型のオフィス ソフトウェアが依然として人々に使用されている主なツールである一方で、比較的包括的で専門的な情報管理ソフトウェアは依然としてほとんどの人に理解または認識されていません。このトピックでは、ラベル分類管理などの手法を通じてペット譲渡管理システムのさまざまな機能を実現し、ペット譲渡管理システムの管理を実現することを目的としています。
詳細な導入については、次の 6 章で詳しく説明します。
第 1 章「はじめに」では、研究テーマ選定の背景と意義、研究状況を紹介し、本稿の章内容を簡単に紹介します。
第 2 章: 技術知識を導入し、主要な技術を導入して開発し、直感的に表現された技術知識をシステムに導入します。
第 3 章では、システムの分析に焦点を当て、システムの旺盛な需要と供給市場から始まり、システム開発の実現可能性、システムのプロセス、システムの性能と機能について議論します。
第 4 章では、システムの構造設計やデータベース設計など、システムの詳細な設計計画について説明します。
第 5 章のシステム設計の実装では、システムの機能設計の詳細な説明を通じてシステムの構造を示します。
第 6 章: システムをオンラインで実行できるかどうかを判断するためのシステム全体のテスト。
2 システム開発環境
2.1 開発技術
このシステムのフロントエンド部分は B/S モードを使用した MVVM モデルに基づいて開発され、バックエンド部分は Java springboot フレームワークに基づいて開発されています。
フロントエンド部分: フロントエンド フレームワークは、人気のあるプログレッシブ JavaScript フレームワーク Vue.js を使用します。Vue-Router と Vuex を使用して動的ルーティングとグローバル状態管理を実現し、Ajax を使用してフロントエンドとバックエンドの通信を実現し、Element UI コンポーネント ライブラリと Lay UI コンポーネント ライブラリを使用してページのプロトタイプを迅速に作成します。 PCやタブレットに適応するグリッドレイアウトデスクトップや携帯電話など、さまざまな画面サイズに最適なレイアウト表示。
バックエンド部分:開発フレームワークとして springboot を使用し、MyBatis、Redis、およびその他の関連テクノロジーを統合します。
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 を作成しました。
2.3 MySQLの説明
現在、Mysql データベースはネットワーク上の多くの学生をサポートでき、顧客のサーバーとサーバーの展開や構成にも適応できます。ここでのサーバーとクライアントは実際にはソフトウェアの概念であり、使用するコンピューター ハードウェアも同様です。それらとの 1 対 1 対応 [3]。
Mysql は非常に人気のあるリレーショナル データベース管理システムです。常にリーダーであり続けています。非常に強力であるだけでなく、非常に使いやすいです。Mysql のクロスプラットフォーム機能も非常に優れています。ソフトウェア開発者はこれを非常に気に入っています。強力な利点。他のリレーショナル データベースとは異なり、データベース管理のための独自のソリューション セットがあり、学生に対応する権限と役割を設定することでデータベース管理が実現されます。Mysql は、高スループット、高信頼性、高効率に適したデータベース管理ソフトウェアであることがわかります [4]。
利点 1: Mysql は、異なるビジネス ロジックを完了するために、異なる ID を持つ学生に異なる権限を設定します。これにより、Mysql はセキュリティと整合性の点で他のリレーショナル データベースをはるかに上回ります。
利点 2: Mysql はアニメーション、グラフィックス、サウンドなどのデータ型もサポートできます。これは、Mysql が複数のデータ型もサポートできることを示しています。
利点 3: Mysql は複数のプラットフォームで開発することもでき、ソフトウェア開発用の複数のプログラミング言語で Mysql データベースを操作できます。
2.4 B/Sシステムの動作原理
TB/S アーキテクチャは、ブラウザ要求とサーバー応答の動作モードを採用しています。
ユーザーは、ブラウザーを介して、インターネット上の Web サーバーによって生成されたテキスト、データ、画像、アニメーション、ビデオ オン デマンド、サウンド、その他の情報にアクセスできます。
各 Web サーバーはさまざまな方法でデータベース サーバーに接続でき、実際には大量のデータがデータベース サーバーに保存されます。
プログラムをWebサーバーからローカルにダウンロードして実行します。ダウンロード プロセス中にデータベースに関連する命令が見つかった場合、Web サーバーは解釈と実行のためにその命令をデータベース サーバーに渡し、Web サーバーに返します。 Web サーバーはそれをユーザーに返します。この構造では、多数のネットワークが接続されて巨大なネットワーク、つまりグローバルネットワークが形成されます。各企業はこの構造に基づいて独自のインターネットを構築できます。
B/Sモードでは、ユーザーがブラウザを介してネットワーク上に分散した多数のサーバーにアクセスを要求し、ブラウザの要求はサーバーで処理され、処理結果と対応する情報がブラウザに返されます。 その他のデータ すべての処理とリクエストWeb サーバーによって完了します。このフレームワーク構造とオペレーティング システム内に組み込まれたブラウザにより、この構造は今日のソフトウェア アプリケーションの主流の構造パターンになりました。
。
2.5 MVVMパターンの概要
MVVMはModel-View-ViewModelの略称です。これは本質的に MVC の改良版です。MVVM はビューの状態と動作を抽象化し、ビュー UI とビジネス ロジックを分離できるようにします。もちろん、ViewModel はこれらのことをすでに行っており、モデルのデータを取り出して、コンテンツを表示する必要があるためにビューに含まれるビジネス ロジックの処理に役立ちます。Microsoft の WPF は、Silverlight、オーディオ、ビデオ、3D、アニメーションなどの新しい技術エクスペリエンスをもたらし、その結果、ソフトウェア UI レイヤーがより詳細でカスタマイズ可能になります。同時に、技術レベルでは、WPF はバインディング、依存関係プロパティ、ルーテッド イベント、コマンド、DataTemplate、ControlTemplate などの新機能ももたらします。MVVM (Model-View-ViewModel) フレームワークの起源は、 MVP (Model-View-Presenter)パターンと WPF を組み合わせたアプリケーション手法から進化した新しいアーキテクチャフレームワークです。これは、オリジナルの MVP フレームワークに基づいており、ますます複雑になる顧客ニーズの変化に対応するために WPF の新機能が組み込まれています。
2.6 Javaの説明
Java は、主に JAVA 仮想マシン (JVM) と JAVA API (アプリケーション プログラム インターフェイス、アプリケーション インターフェイス プログラミング) の 2 つの部分で構成されるプラットフォーム コンピューター言語テクノロジです。
私は個人的にこの 2 つの言語について深く理解しています。C 言語は作成ツールに近いのに対し、Java は使用ツールに近いです。Java の基礎となる実装の多くが実際には C 言語で実装されていることはわかっているので、これをさらに理解することができます。Java を使用するプロセスでは、Java の使用説明書とみなされる API ドキュメントを使用できる必要があります。Java のオブジェクト指向の特性により、多くのオブジェクトをカプセル化することができます。Java を使用する場合、オブジェクトの動作 (オブジェクトのカプセル化の方法でもあります) を知るだけで済みます。ここで注意しなければならないのは、そのメソッドがオブジェクトの動作であるかどうかです。静的メソッドでも通常のメソッドでも、呼び出すときにギャップが非常に大きいためです。将来的には、Java よりも使いやすく、開発しやすいプログラミング言語が登場することは間違いありませんが、それが Java 言語とまったく異なるものであることは間違いありません。 Java をよく学ぶと、他の言語もより簡単に学習できるようになります。
3 システム分析
いわゆるシステム分析とは、需要担当者がユーザーとのコミュニケーションを通じて情報を取得し、その情報を需要仕様の形でユーザーや開発者に提示することを意味します。ソフトウェア機能開発の長い歴史の中で、特に初期の頃は、アメリカのIBM社がイギリス向けの情報管理システムを開発するなど、長い間、要求分析の重要性は人々に認識されていませんでした。 Telecom. 不透明なまま開発が始まり、当初工期は1年だったが、要件が不明確なため工期が半年以上遅れ、巨額の損失が発生した。この状況は多くのソフトウェア会社にもあり、開発しながら開発し、ユーザーとの明確なコミュニケーションがないにもかかわらず、同じ種類のプロジェクトを直接コピーして変更を加え、その結果、システムが受け入れられたときに再度変更が加えられ、その結果、人的資源と物的資源が失われ、多大な無駄が生じます。こうした結果が生じる理由は、需要の獲得がタイムリーでなく、不透明で、不完全であることにあります。
3.1 実現可能性の分析
ペット病院予約登録システムの主な目的は、オンライン関連の情報管理サービスの実現です。目標を定めた後は、以下の4つの観点から本システムの目標が達成できるかどうかの実現可能性分析を行います。
3.1.1技術的な実現可能性
ペット病院の予約登録システムは主にJava技術を使用しており、B/S構造とMysqlデータベースに基づいており、アプリケーションの開発には、完全な機能、簡単な操作、完全かつ安全で安定したデータを含むデータベースの構築が必要です。ペット病院予約登録システムの開発技術は実現可能性が高く、開発者も一定の開発技術を習得しているため、システムの開発は可能である。
3.1.2運用の実現可能性
ペット病院予約登録システムのログインインターフェースは、パソコンからのログインとアクセス操作を共通インターフェース画面で行うため、パソコンを使用している会員であれば誰でも簡単にアクセスできるシンプルで操作性の高いシステムとなっています。本システムの開発にはJava言語を使用し、B/S構造をベースに開発を行っており、より完成度の高い開発環境となっております。このシステムは、操作が簡単、管理が簡単、双方向性が良いという特徴があり、操作が非常に簡単です。したがって、このシステムは開発可能です。
3.1.3 経済的実現可能性
ペット病院の予約登録システムはJavaモードをベースとし、データ保存にはMysqlデータベースを使用し、必要なハードウェアおよびソフトウェア環境は市販で容易に購入可能であり、プログラム開発は主に管理システムの開発と保守を行います。したがって、高い開発人材や資金を必要とせず、システムもそれほど複雑ではなく、開発サイクルも短く、経済性が高い。
3.1.4 法的実現可能性
このペット病院予約登録システムは、自社で設計した管理システムであり、実用的な意義は大きい。ソフトウェア、データベースともにオープンソースコードを使用しているため、侵害等の問題がなく、合法的に開発・設計が可能です。
要約すると、ペット病院の予約登録システムは技術的、経済的、運用的、法的に実現可能であり、このプログラムを開発することは可能です。
3.2 システムプロセス分析
3.2.1 システム開発プロセス
ペット病院予約登録システムを開発する際には、まず需要分析を行い、システム全体の設計計画、システム機能モジュールの設計、データベースの選定などを行います。本システムの開発プロセスは図3-1に示されています。 。
図 3-1 システム開発フローチャート
3.2.2ユーザーのログインプロセス
システムのセキュリティを確保するため、本システムを利用してシステム情報を管理する場合は、まずシステムにログインする必要があります。図 3-2 に示すように。
図 3-2 ログインのフローチャート
3.2.3 システム運用プロセス
ユーザーがシステムを開いて入力すると、最初にログイン インターフェースが表示され、正しいユーザー名とパスワードが入力されます。システムは情報を自動的に検出します。情報が正しければ、ユーザーはシステム機能インターフェースに入ります。操作手順を図 3-3 に示します。
図 3-3 システム動作フローチャート
3.2.4 情報処理の追加
管理者はペット情報などを追加できますユーザーは自らの権限で情報を追加できます 情報を入力後、システムが入力情報とデータを検証し、情報が正しい場合はデータベースに追加されます情報を追加するプロセスを図 3-4 に示します。
図 3-4 情報追加のフローチャート
3.2.5 情報フローの変更
管理者はペット情報等を変更することができますユーザーは自らの権限で情報を変更することができます まず、変更情報インターフェースに入り、変更情報データを入力します システムがデータを判断し検証します 変更された情報が合法である場合、変更は行われます成功するとデータベースに情報が更新されますが、情報が不正な場合は変更に失敗し、再入力されます。変更された情報のフローチャートを図 3-5 に示します。
図 3-5 情報変更のフローチャート
3.2.6 情報削除処理
管理者はペット管理情報などを削除できます。削除する情報を選択後、削除ボタンをクリックすると、確認を求めるメッセージが表示されます。OKをクリックすると、選択した情報が削除され、更新されます。情報が削除されます 情報削除のフローチャートを図 3-6 に示します。
図 3-6 削除情報のフローチャート
3.3 システムのユースケース分析
3.3.1 管理者の使用例図
システムのコアユーザーはシステム管理者であり、管理者はログイン後、管理者を通じてバックエンドシステムを管理します。主な機能としては、ホームページ、システム利用者(管理者、ペット医師、飼い主)、モジュール管理(ペット情報、医師情報、予約登録、診断レポート、日々の健康状態、ペットログ、番号源管理)、パーソナルセンター等の機能が挙げられます。。管理者の使用例を図3-7に示します。
図 3-7 管理者の使用例図
3.3.2医師のユースケース図
医師がシステムに入ると、ホームページ、モジュール管理(医師情報、予約登録、診断レポート、日々の健康状態、ペットログ)、パーソナルセンターなどにアクセスできます。ユーザーの使用例を図3-8に示します。
図 3-8ドクターのユースケース図
3.3. 3ペットの飼い主のユースケース図
医師ユーザーはシステムに入るとホームページ、モジュール管理(ペット情報、医師情報、予約登録、診断レポート、日々の健康状態、ペットログ)、パーソナルセンターなどが閲覧できます。医師ユーザーの例を図3-9に示します。
図 3-9ペットの飼い主ユーザーのユースケース図
4 システム設計
4.1 システム概要
システム分析後はシステム設計に入りますが、システム設計には全体設計と詳細設計が含まれます。全体設計はあくまで大まかな設計であり、全体設計が完了したら、ファイル、ドキュメント、データなど、システムの一部を分割することができます。そして全体の設計を通じて、プログラムのモジュールと機能を大まかに分けることができます。しかし、これは暫定的な分類にすぎず、実際の実装はありません。
全体設計はあくまで予備設計であり、プロジェクト内で複数の全体設計を実施し、性能比較、コスト比較、便益比較などを比較することで、最終的に最適な設計案を決定し、最適な設計案を選択します。全体設計は開発コストを削減し、企業の利益を増大させることができるため、この観点からも全体設計は非常に重要です。
ペット病院予約登録システムの動作原理図を図 4-1 に示します。
図 4-1 システム動作原理図
4.2 システム構成設計
システム アーキテクチャ図はシステム設計段階に属します。システム アーキテクチャ図はこの段階での成果物にすぎません。システム全体のアーキテクチャはシステム全体のモデルを決定し、システムの基礎となります。ペット病院予約登録システムの全体構成を図 4-2 に示します。
図 4-2 システム構成図
4.3 データベース設計
データベースはコンピュータ情報システムの基礎です。現在、コンピュータ システムの中心となる部分はデータベースです。データベース開発の品質は、システム全体の品質と速度に直接影響します。
4.3.1 データベース設計の原則
データベースの概念構造設計には、エンティティ関係 (ER) モデル設計手法が採用されています。ER モデル手法の構成要素は、エンティティ、属性、関係です。ER モデルは、作業環境に関係するものをユーザーに思い出させる ER 図で表され、属性はエンティティの特性を記述します。データベースはシステム設計において決定的な要素となります。これらの主要なエンティティのエンティティ関係図は以下に設計されています。
4.3.2 データベースエンティティ
データ モデル内のエンティティ (インスタンスとも呼ばれます) は、現実世界の他のオブジェクトと区別できる「イベント」または「物事」に対応します。たとえば、会社のすべての従業員、家のすべての家具などです。
図 4-3 システム ER 図
4.3.3 データベーステーブルの設計
データベースのテーブル情報も設計の一部ですが、データベース内の各テーブルの詳細情報を以下に紹介します。
テーブル access_token (ログインアクセス期間)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
トークンID |
整数 |
10 |
0 |
N |
Y |
一時的なアクセスバッジID |
|
2 |
トークン |
可変長文字 |
64 |
0 |
Y |
N |
一時的なアクセスバッジ |
|
3 |
情報 |
文章 |
65535 |
0 |
Y |
N |
||
4 |
最大値 |
整数 |
10 |
0 |
N |
N |
2 |
最大寿命: デフォルト 2 時間 |
5 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
6 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
7 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
ユーザーID: |
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
auth_id |
整数 |
10 |
0 |
N |
Y |
認可ID: |
|
2 |
ユーザー・グループ |
可変長文字 |
64 |
0 |
Y |
N |
ユーザー・グループ: |
|
3 |
mod_name |
可変長文字 |
64 |
0 |
Y |
N |
モジュール名: |
|
4 |
テーブル名 |
可変長文字 |
64 |
0 |
Y |
N |
テーブル名: |
|
5 |
ページタイトル |
可変長文字 |
255 |
0 |
Y |
N |
ページタイトル: |
|
6 |
パス |
可変長文字 |
255 |
0 |
Y |
N |
ルーティングパス: |
|
7 |
位置 |
可変長文字 |
32 |
0 |
Y |
N |
位置: |
|
8 |
モード |
可変長文字 |
32 |
0 |
N |
N |
_空白 |
ジャンプ方法: |
9 |
追加 |
タイニーント |
3 |
0 |
N |
N |
1 |
以下を追加することは可能ですか? |
10 |
の |
タイニーント |
3 |
0 |
N |
N |
1 |
削除できますか: |
11 |
セット |
タイニーント |
3 |
0 |
N |
N |
1 |
変更できるかどうか: |
12 |
得る |
タイニーント |
3 |
0 |
N |
N |
1 |
閲覧することは可能ですか: |
13 |
フィールド追加 |
文章 |
65535 |
0 |
Y |
N |
フィールドを追加します。 |
|
14 |
フィールドセット |
文章 |
65535 |
0 |
Y |
N |
フィールドを変更します。 |
|
15 |
フィールド取得 |
文章 |
65535 |
0 |
Y |
N |
クエリフィールド: |
|
16 |
テーブルナビゲーション名 |
可変長文字 |
500 |
0 |
Y |
N |
クロステーブル ナビゲーション名: |
|
17 |
テーブルナビ |
可変長文字 |
500 |
0 |
Y |
N |
テーブル間のナビゲーション: |
|
18 |
オプション |
文章 |
65535 |
0 |
Y |
N |
構成: |
|
19 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
20 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
daily_health_id |
整数 |
10 |
0 |
N |
Y |
毎日の健康ID |
|
2 |
タイトル名 |
可変長文字 |
64 |
0 |
Y |
N |
タイトル名 |
|
3 |
コンテンツタイプ |
可変長文字 |
64 |
0 |
Y |
N |
コンテンツタイプ |
|
4 |
content_body |
longtext |
2147483647 |
0 |
Y |
N |
内容正文 |
|
5 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
6 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
7 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
diagnostic_report_id |
int |
10 |
0 |
N |
Y |
诊断报告ID |
|
2 |
doctor_account |
int |
10 |
0 |
Y |
N |
0 |
医生账号 |
3 |
doctor_no |
varchar |
64 |
0 |
Y |
N |
医生编号 |
|
4 |
doctors_name |
varchar |
64 |
0 |
Y |
N |
医生姓名 |
|
5 |
master_account |
int |
10 |
0 |
Y |
N |
0 |
主人账号 |
6 |
host_name |
varchar |
64 |
0 |
Y |
N |
主人姓名 |
|
7 |
pet_nickname |
varchar |
64 |
0 |
Y |
N |
宠物昵称 |
|
8 |
pet_species |
varchar |
64 |
0 |
Y |
N |
宠物种类 |
|
9 |
pet_age |
varchar |
64 |
0 |
Y |
N |
宠物年龄 |
|
10 |
diagnosis_date |
date |
10 |
0 |
Y |
N |
诊断日期 |
|
11 |
diagnostic_instructions |
text |
65535 |
0 |
Y |
N |
诊断说明 |
|
12 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
13 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
14 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
doctor_information_id |
int |
10 |
0 |
N |
Y |
医生信息ID |
|
2 |
doctor_account |
int |
10 |
0 |
Y |
N |
0 |
医生账号 |
3 |
doctor_no |
varchar |
64 |
0 |
Y |
N |
医生编号 |
|
4 |
doctors_name |
varchar |
64 |
0 |
Y |
N |
医生姓名 |
|
5 |
employment_time |
varchar |
64 |
0 |
Y |
N |
从业时间 |
|
6 |
areas_of_expertise |
text |
65535 |
0 |
Y |
N |
擅长领域 |
|
7 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
8 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
表have_an_appointment_with_a_doctor (预约挂号)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
have_an_appointment_with_a_doctor_id |
int |
10 |
0 |
N |
Y |
预约挂号ID |
|
2 |
doctor_account |
int |
10 |
0 |
Y |
N |
0 |
医生账号 |
3 |
doctor_no |
varchar |
64 |
0 |
Y |
N |
医生编号 |
|
4 |
doctors_name |
varchar |
64 |
0 |
Y |
N |
医生姓名 |
|
5 |
master_account |
int |
10 |
0 |
Y |
N |
0 |
主人账号 |
6 |
host_name |
varchar |
64 |
0 |
Y |
N |
主人姓名 |
|
7 |
pet_nickname |
varchar |
64 |
0 |
Y |
N |
宠物昵称 |
|
8 |
pet_species |
varchar |
64 |
0 |
Y |
N |
宠物种类 |
|
9 |
pet_age |
varchar |
64 |
0 |
Y |
N |
宠物年龄 |
|
10 |
pet_status |
text |
65535 |
0 |
Y |
N |
宠物状态 |
|
11 |
appointment_date |
date |
10 |
0 |
Y |
N |
预约日期 |
|
12 |
appointment_number_source |
varchar |
64 |
0 |
Y |
N |
预约号源 |
|
13 |
examine_state |
varchar |
16 |
0 |
N |
N |
未审核 |
审核状态 |
14 |
examine_reply |
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 |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
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: |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
paws_claws_pet_vet_id |
int |
10 |
0 |
N |
Y |
宠物医生ID |
|
2 |
doctor_no |
varchar |
64 |
0 |
N |
N |
医生编号 |
|
3 |
doctors_name |
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 |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
pet_information_id |
int |
10 |
0 |
N |
Y |
宠物信息ID |
|
2 |
master_account |
int |
10 |
0 |
Y |
N |
0 |
主人账号 |
3 |
host_name |
varchar |
64 |
0 |
Y |
N |
主人姓名 |
|
4 |
pet_nickname |
varchar |
64 |
0 |
Y |
N |
宠物昵称 |
|
5 |
pet_species |
varchar |
64 |
0 |
Y |
N |
宠物种类 |
|
6 |
pet_age |
varchar |
64 |
0 |
Y |
N |
宠物年龄 |
|
7 |
pet_health_history |
text |
65535 |
0 |
Y |
N |
宠物健康史 |
|
8 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
9 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
pet_log_id |
int |
10 |
0 |
N |
Y |
宠物日志ID |
|
2 |
master_account |
int |
10 |
0 |
Y |
N |
0 |
主人账号 |
3 |
host_name |
varchar |
64 |
0 |
Y |
N |
主人姓名 |
|
4 |
pet_nickname |
varchar |
64 |
0 |
Y |
N |
宠物昵称 |
|
5 |
log_title |
varchar |
64 |
0 |
Y |
N |
日志标题 |
|
6 |
log_body |
longtext |
2147483647 |
0 |
Y |
N |
日志正文 |
|
7 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
8 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
pet_owners_id |
int |
10 |
0 |
N |
Y |
宠物主人ID |
|
2 |
host_name |
varchar |
64 |
0 |
Y |
N |
主人姓名 |
|
3 |
host_gender |
varchar |
64 |
0 |
Y |
N |
主人性别 |
|
4 |
pet_nickname |
varchar |
64 |
0 |
Y |
N |
宠物昵称 |
|
5 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通过 |
审核状态 |
6 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
7 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用户ID |
8 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
1 |
source_management_id |
int |
10 |
0 |
N |
Y |
号源管理ID |
|
2 |
source_name |
varchar |
64 |
0 |
Y |
N |
号源名称 |
|
3 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推荐 |
4 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
创建时间 |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新时间 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
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 |
文件类型 |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
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 |
创建时间: |
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
默认值 |
说明 |
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 |
更新时间: |
5统详细设计
5.1注册模块
未注册用户在用户注册界面uerRegister.jsp,输入新用户信息,点击注册后,新用户信息由界面传入控制层userAction,调用addUser(user)方法,通过userDAOImp向数据库用户表插入用户信息,由于用户账号是自动生成的,若成功则反馈注册成功,并提示新用户的用户账号;若失败则回到登录界面,并显示登录失败。
注册界面如下所示。
图5-1注册界面
用户注册关键代码如下所示。
/**
* 注册
* @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;
}
5.2登录/注销模块
用户在首页点击登录,进入用户登录界面uerLogin.jsp,输入用户账号和密码,点击登录,用户账号和密码信息由界面传入控制层userAction,调用userLogin(user)方法,通过userDAOImp向数据库用户表搜索该用户账号与密码,将最终结果反馈到前端。若成功则回到首页;用户成功登录,若失败则回到登录界面,并显示登录失败。
用户点击注销,清空浏览器session值,然后返回登录页或者首页。
登录界面如下所示。
图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;
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, "账号或密码不正确");
}
}
5.3个人资料模块
登录用户在首页点击进入用户中心userCenter.jsp,再点击修改个人信息按钮进入userChangeInfo.jsp界面,系统根据session中存储的目前登录的用户的账号,向控制层userAction发送请求,搜索当前用户信息,userAction向userDAOImp调用queryByUserId(user),向数据库的用户表搜索当前用户信息并将用户信息以对象的形式层层返回到userChangeInfo.jsp界面,显示出当前用户的个人信息。
若用户要对个人信息进行修改,则通过修改当前信息之后点击确认,向控制层userAction发送更改后的用户信息,调用changeUser(user)方法,通过userDAOImp向数据库用户表更新用户信息,若成功则反馈注册成功,则返回的userChangeInfo.jsp界面被更改成功;若失败则显示修改失败。
5.4宠物信息模块
宠物主人在登录状态下添加宠物信息,从session中取出该用户的信息,点击加入宠物信息后前台发起请求,将对应的宠物shuliang、id参数信息从前台传递GoumaiController类里,匹配到add()方法,add()方法调用GoumaiServiceImpl类的add()方法。
宠物信息界面如下所示。
图5-3宠物信息界面
5.5预约挂号模块
宠物主人在登录状态下可以查看医生信息,在医生信息下方可以进行预约挂号提交操作。
预约挂号界面如下所示。
图5-4预约挂号界面
5.6密码修改模块
管理员选择个人中心的修改本人密码。通过密码框输入现密码和2次新密码,如果现密码错误,则提示修改失败。如果2次新密码不一致,则提示修改失败。都没问题的话,系统提示修改成功,并返回登录界面。
系统用户管理界面如下所示。
图5-5系统用户管理界面
5.7医生管理模块
根据需求,需要对医生进行添加、删除或修改详情信息。删除或修改医生时,系统根据医生的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询医生状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。
添加医生时,会给出数据填写的页面,该页面根据填写好的医生编号同样会事先发送Ajax请求查询编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。
医生页面设计效果如下图所示。
图5-6医生信息界面
5.8号源管理模块
号源功能需要考虑高并发,防止出现重复号源状态显示出错等情况,特对号源这一共享数据增加锁机制。在乐观锁、悲观锁以及线程锁中,综合考虑性能效率和错误的可接受性选择了乐观锁机制。乐观锁的实现方式是使用版本标识来确定读到的数据与提交时的数据是否一致,提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。在数据库设计中增加了version字段,每次数据提交时会判断version是否匹配,若不匹配停止本次提交,若匹配则提交成功并增加version的值。
号源功能整体流程:用户浏览诊号源息时,同时会显示号源的状态,系统会在其显示详细信息的页面时便会判断号源的状态,若号源状态为可预约,则会显示号源的链接按钮。在用户点击号源按钮时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写号源信息的页面,填写好号源信息之后,点击提交按钮,预约成功之后返回提示信息,告知用户预约成功。
号源流程图如下图所示。
图5-7预约流程图
号源界面如下图所示。
图5-8号源管理界面
5.9日常健康管理模块
根据需求,需要对日常健康信息进行添加、删除或修改详情信息。系统根据日常健康信息的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询病例状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。
添加日常健康信息时,会给出数据填写的页面,该页面根据填写好的病例同样会事先发送Ajax请求查询病例编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。
日常健康管理页面设计效果如下图所示。
图5-10日常健康管理界面图
日常健康管理的关键代码如下。
@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();
}
第6章系统测试
6.1测试概述
软件测试是软件开发完成后必须经过的一道程序,它在软件开发过程中地位十分重要,需要由专业的测试工程师来对软件进行各方面的测试,大到功能模块测试,小到代码的单元测试,这对测试工程师来说需要有足够的耐心和专业的测试方案,软件测试归根结底就是对软件的结构和功能的综合测评,需要做到结构稳定和功能正确,二者兼顾。软件测试也叫寻找系统bug的过程,世界上没有完美无缺、不存在bug的软件,只能将软件的bug降到最低最小,来追求极致。
6.2测试过程
6..2.1登录测试
登录测试是系统最开始就要进行,测试用户能否登录,才能完成后续的功能操作。
登录测试用例表如下所示。
表6-1登录测试
用例编号 |
YL001 |
程序版本 |
1.00 |
功能名称 |
使用者登录测试 |
编制人 |
李铁蛋 |
功能描述 |
根据用户的登录情况测试 |
||
用例目的 |
测试用户登录情况是否正确 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
用户名 |
为空 |
请输入用户名 |
请输入用户名 |
密码 |
为空 |
请输入密码 |
请输入密码 |
用户密码组合 |
用户名:klouse 密码 klouses |
用户与密码不匹配 |
用户与密码不匹配 |
用户密码组合 |
用户名 : klouse 密码 klouse |
进入系统 |
正确的用户名和密码 登录系统 |
6.2.2信息录入测试
管理员在发布信息页面,通过按照预先格式发布信息,如果因为输入时候缺少相关内容,就不能发布成功,且有相应错误提示
信息录入发布测试用例表如下所示。
表6-1信息录入发布测试
用例编号 |
YL002 |
程序版本 |
1.00 |
功能名称 |
信息发布测试 |
编制人 |
李铁蛋 |
功能描述 |
对使用者发布或者录入信息进行测试,判断其功能是否达到预期的要求 |
||
用例目的 |
对系统使用者录入发布信息进行原型测试。 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
属性1 |
为空 |
请输入属性1对应的数据 |
请输入属性1对应的数据 |
属性2 |
为空 |
请输入属性2对应的数据 |
请输入属性2对应的数据 |
属性3 |
为空 |
请输入属性3对应的数据 |
请输入属性3对应的数据 |
全部输入 |
数据均填入 |
录入发布成功 |
录入发布成功 |
6.2.3信息更新测试
管理员在更新信息页面,通过按照预先格式更新信息,如果因为输入时候缺少相关内容或者更新的数据不符合当前规范的话,就不能更新成功,且有相应错误提示
信息更新测试用例表如下所示。
表6-1信息更新测试
用例编号 |
YL003 |
程序版本 |
1.00 |
功能名称 |
信息更新测试 |
编制人 |
李铁蛋 |
功能描述 |
对使用者更新信息进行测试,判断其功能是否达到预期的要求 |
||
用例目的 |
对系统使用者更新信息进行原型测试。 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
属性1 |
编号:321 |
编号更新成功 |
编号更新成功 |
属性2 |
名称:名称1 |
名称更新成功 |
名称更新成功 |
属性3 |
内容:内容1234内容 |
内容更新成功 |
内容更新成功 |
全部输入 |
数据均未更改 |
更新成功 |
更新成功 |
6.2.4信息删除测试
管理员在信息页面,通过点击数据删除按钮来删除该条数据,如果该数据和其他数据有关联,则提示是否确定删除。
信息删除测试用例表如下所示。
表6-1信息删除测试
用例编号 |
YL004 |
程序版本 |
1.00 |
功能名称 |
信息删除测试 |
编制人 |
李铁蛋 |
功能描述 |
对使用者删除信息进行测试,判断其功能是否达到预期的要求 |
||
用例目的 |
对系统使用者删除信息进行原型测试。 |
||
测试项 |
测试数据 |
测试结果 |
预期结果 |
数据1 |
无任何关联的数据1 |
数据删除成功 |
数据删除成功 |
数据2 |
和其他数据有关联的数据2 |
请确认是否删除 |
请确认是否删除 |
6.3测试结果
在经过之前的所有的工作之后,通过对软件的测试方法、测试原则还有典型的测试用例进行全面的、深入的介绍。经过对系统的全面测试,系统目前所具有的所有功能均成功的实现并且通过了测试,整个系统实现了基于 Java 开发的期望。
结 论
本系统通过对java和Mysql数据库的简介,从硬件和软件两反面说明了宠物医院预约挂号系统的可行性,本文结论及研究成果如下:实现了java与Mysql相结合构建的宠物医院预约挂号系统,网站可以响应式展示。通过本次宠物医院预约挂号系统的研究与实现,我感到学海无涯,学习是没有终点的,而且实践出真知,只有多动手才能尽快掌握它,经验对系统的开发非常重要,经验不足,就难免会有许多考虑不周之处。比如要有美观的界面,更完善的功能,才能吸引更多的用户。
由于在此之前对于java知识没有深入了解,所以从一开始就碰到许多困难,例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等,不过通过在网上寻找有关资料以及同学的帮助下最后都得到了解决,在此过程中,我不仅学到了很多知识,也提高了自己解决问题的能力,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然书本上的大部分知识都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中,我不断的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大帮助。
通过这次宠物医院预约挂号系统的开发,我参考了很多相关系统的例子,取长补短,吸取了其他系统的长处,逐步对该系统进行了完善,但是该系统还是有很多的不足之处,有待以后进一步学习。
实践证明,宠物医院预约挂号系统有着非常好的发展前景,经过测试运行,系统各项功能都十分完善,界面漂亮,使用方便,操作容易,在技术理论上已经成熟。
致 谢
大学的学习生活在这个季节将结束,但是在我的生命这仅仅只是一个逗号,我将面对另一个新的环境开始。通过这次毕业设计的整个开发过程,从需求分析到具体功能实现,再到最终测试和维护的理解有了很大的进步,让我对系统开发有了更深刻的认识,对我个人的实践能力和解决问题的能力,都有了很大的帮助。这是这次毕业设计最大的收获。
首先要感谢我的指导老师,他在论文写作上,给予了我各种无私的帮助,治学严谨,严格要求,使我获得了很大的收获。老师深厚的理论知识和丰富的实践经验,都深深的影响到我,在这方面,我谨表示衷心的感谢。
其次,我还要对所有的老师和同学表示感谢,他们在我学习的过程中,都积极的提供了很多帮助,无论是专业知识,还是实践操作技能,也能够让我在论文写作中,遇到的一些难题迎刃而解。
参考文献
[1]王志亮,纪松波.基于SpringBoot的Web前端与数据库的接口设计[J].工业控制计算机,2023,36(03):51-53.
[2]叶长青.一种基于SpringBoot的影视内容推荐系统的设计与实现[J].电脑知识与技术,2023,19(01):85-87.DOI:10.14004/j.cnki.ckt.2023.0015.
[3]Yu Yang. Design and Implementation of Student Information Management System Based on Springboot[J]. Advances in Computer, Signals and Systems,2022,6(6).
[4]Møller Pål. The Prospective Lynch Syndrome Database: background, design, main results and complete MySQL code[J]. Hereditary Cancer in Clinical Practice,2022,20(1).
[5]Győrödi Cornelia A.,DumşeBurescu Diana V.,Zmaranda Doina R.,Győrödi Robert Ş.. A Comparative Study of MongoDB and Document-Based MySQL for Big Data Application Data Management[J]. Big Data and Cognitive Computing,2022,6(2).
[6]Wu Daiwen. The Application and Management System of Scientific Research Projects Based on PHP and MySQL[J]. Journal of Interconnection Networks,2022,22(Supp02).
[7]邢娜,郑蕾,王莉.医院网站预约挂号系统设计[J].解放军医院管理杂志,2021,28(10):929-930+969.DOI:10.16770/J.cnki.1008-9985.2021.10.012.
[8]万杰.基于微信公众号的医院预约挂号系统开发[J].湖州职业技术学院学报,2021,19(03):76-80.DOI:10.13690/j.cnki.hzyxb.issn.1672-2388.2021.03.19.
[9]Fuyuan Cheng. Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J]. Advances in Educational Technology and Psychology,2021,5(2).
[10]白建宇. 基于SpringBoot的大数据日志分析系统的设计与实现[D].首都经济贸易大学,2021.DOI:10.27338/d.cnki.gsjmu.2021.000994.
[11]李娟,彭剑.基于SpringBoot的高校课程知识库的设计与实现[J].电脑知识与技术,2021,17(06):70-71.DOI:10.14004/j.cnki.ckt.2021.0428.
[12]马艳夕.基于SpringBoot与Vue技术的企业电商平台的设计与实现[J].信息与电脑(理论版),2021,33(03):99-100.
[13]Guanhong Chen,Jiangming Xu. Design and implementation of efficient Learning platform based on SpringBoot Framework[J]. Journal of Electronics and Information Science,2020,6(1).
[14]张嘉豪,赵亮,翁铭隆,张华俊,李文欣.基于SSM+SpringBoot技术实现服务器监控的研究[J].科学技术创新,2020(33):101-102.
[15]赵富强,严风硕,边岱泉,朱小波.基于Vue和SpringBoot的机场气象信息系统设计与实现[J].现代信息科技,2020,4(21):1-5+9.DOI:10.19850/j.cnki.2096-4706.2020.21.001.
[16]刘嘉琪.宠物医疗发展现状及存在问题与对策[J].中国动物保健,2020,22(10):6+18.
[17]He M,Lv S. Research on Civil Aircraft Structural Strength Material Performance Database Based on SpringBoot[C]//Advanced Science and Industry Research Center.Proceedings of 2020 4th International Conference on Electrical,Automation and Mechanical Engineering(EAME2020).Proceedings of 2020 4th International Conference on Electrical,2020:1062-1067.DOI:10.26914/c.cnkihy.2020.057541.
[18]姚文杰.基于微信公众平台的医院预约挂号系统研究[J].数码世界,2020(04):29.
[19]Yao Zhang Li,Sheng Gao,Jing Pan,Bi Feng Guo,Pei Feng Xie. Research and Application of Template Engine for Web Back-end Based on MyBatis-Plus[J]. Procedia Computer Science,2020,166(C).
[20] Gong Lei. スマートモバイル端末に基づく病院予約登録システムの設計と研究 [J]. コンピュータプログラミングスキルとメンテナンス、2020(02):48-49+87.DOI:10.16184/j.cnki.comprg. 2020.02.016.
[21]Hou Y. Web アプリケーション開発における Spring+SpringMVC+MyBatis のフレームワークの設計と実装[C]//経営科学産業工学研究所。2019 年第 4 回国際産業情報学およびコンピュータ工学会議講演録( IIICEC 2019).2019 年第 4 回国際産業情報学およびコンピュータ工学会議会議録(IIICEC 2019)、2019:369-374.DOI:10.26914/c.cnkihy.2019.039191。
[22] Dai Mingfu. MVC モデルに基づく病院予約登録管理システムの設計と実装 [D]. 広西大学、2019.
[23] Zhang Yuerui. 寧波 AX ペット病院の発展戦略に関する研究 [D]. 寧波大学、2019. DOI: 10.27256/d.cnki.gnbou.2019.000171.
[24] Wang Ke. Android システムに基づく病院モバイル予約登録プラットフォームの設計と実装 [D]. 鄭州大学、2019.
プロジェクトのソース コードを無料で受け取るには、ブロガーをフォローして「いいね」を押し、プライベート メッセージを送ってください。