前に書いています
ブログは長い間更新されていませんでしたが、最近 MSRA マスター Liu Weipeng (www.mindhacks.cn) のブログを読み、アルゴリズム学習について多くのことを学んだ気がします。彼のブログをいくつか読んだ後、私は 2 つのことを行いました
以前のプロジェクト コードをすべて github にアップロードし、ブログを書き続けましたちょうど今週、中学校から成績管理システムの作成を依頼されましたPHP で作成しているので、システム開発プロセスを要約として記録し、庭師仲間と共有して一緒に進めています。
私はまだ学生なので、私の知識と経験は非常に不十分である必要があり、記事の内容は必然的に省略され、表面的なものになる可能性がありますが、偏見がある場合は、皆様にご理解いただけると幸いです。コミュニケーションと進歩が最終目標です、ありがとう!
スコア管理システムの役割と機能 1. 管理者1.1 ユーザー情報のインポート(生徒、教師を含む)
1.2.1 試験の登録(郡統一試験、全校統一試験、クラス試験を含む)
1.2.2 試験情報のクエリ
1.3 スコアのインポート
1.4 パスワードの変更
1.5 ユーザー検索
2. 教師2.1 クラス内の全生徒のスコアの表示 (各科目のスコア、合計スコア、ランキングを含む)
2.2 パスワードを変更する
3. 学生3.1 自分のテストスコアをすべて表示する
3.2 パスワードを変更する
バックステージ言語: PHP
自己 自己: HTML+JavaScript+jquery
導入サーバー: Linux+ nginx
開発プロセス 1. データベース設計
データベースには、成績 (スコア テーブル)、ユーザー (ユーザー テーブル)、試験 (試験テーブル) の 3 つのテーブルがありますusers テーブルのユーザー ID は、 Grades テーブルの userid
Exams テーブルの試験 ID は成績です EXAMID の外側のキー
2. ログイン
ログイン インターフェース
ログイン インターフェースは、jQuery を使用してインターネット上に作成された非常に美しいログイン インターフェースです。 、ダウンロード アドレスが提供されます:
Http: // www.veryhuo.com/down/html/55826.html
ログイン ロジック
ユーザーが正常にログインしたら、ユーザーのユーザー タイプ (管理者、教師、学生)、もちろん、次のような SQL を避けるために、ユーザー入力が行われ、特殊文字がフィルター処理されて処理され、ユーザーのユーザー名、ユーザー タイプ、ユーザー ID およびその他の情報が $_session に読み込まれ、別のセッションに転送されます。ページ (admin.php、Teacher.php、student.php) では、権限のないユーザーがページに直接アクセスできないようにセッションを再認証します。ユーザーがクリックして終了すると、セッション内の一部の変数が空白に設定されます。
3. ユーザー インターフェイス
管理者は、アップロードされた Excel 情報を読み取るために、php-reader サードパーティ プラグインを使用してユーザー情報と成績情報をインポートします。このプラグインのダウンロード アドレスも提供されます。こちら: http://code.google.com/p/php-reader/
このプラグインは、Excel ファイルからデータを取得するための非常に便利な方法をいくつか提供し、セルの境界線の色などの追加情報を読み取ることもできます。このプラグインは .xls ファイルのみを読み取ることができ、.xlxs ファイルは読み取ることができないことに注意してください。
他の教師と生徒のインターフェイスの機能は、単純なテーブルを検索して結果を返すだけであり、複雑な機能はありません。
いくつかの特定の機能についても、詳細な実装で詳しく説明します。前回のユーザー操作のインターフェース図
4. 使用ロジック
管理者がユーザー情報 (生徒と教師を含む) をインポート 管理者が試験情報を登録し、システムが試験 ID を取得して管理者に返す (インポートを区別するために、成績テーブルのスコア データには各試験に ID を割り当てる必要があります) 管理者がスコア テーブルをインポートします (1 つの列は 2 番目のステップで取得した試験 ID) 教師と生徒は、ログインしてスコア テーブルをクエリします結果
(管理者が試験管理 A のテスト ID を取得する必要があるのは、管理者がテストのスコアを入力する際に記録を見逃してしまうことが懸念されるためです。以降のスコアは、システムに記録されたスコアであることを認識させるためです。前回、接続するにはテスト ID が必要でしたので、この一見複雑な試験 ID の取得手順を紹介します)
いくつかの詳細な実装 🎜 🎜1. 教師インターフェイスでこのクラスの生徒全員のスコアをクエリしますすべての生徒のスコアを同じテーブルの成績に入れており、このテーブルの各レコードは生徒の試験の記録であるため、スコアを入れる必要がありますこの教師のクラスの上級クラスの生徒に関連するすべての試験のスコアがクエリされ、各試験はランキングに従って並べ替えられるため、複数のテーブル クエリの問題が含まれる必要があり、スコア フィールドが多数あるため、私の史上最も長い SQL を作成しました ($exam_id は、教師のクラスのすべての生徒のクエリされた試験 ID 番号です):
SELECT t1.sx,t1.yw,t1.yy,t1.wl,t1.hx,t1.sw,t1.ls,t1.zz,t1.dl, (coalesce(t1.sx,0)+coalesce(t1.yw,0)+coalesce(t1.yy,0)+coalesce(wl,0) +coalesce(hx,0)+coalesce(sw,0)+coalesce(ls,0)+coalesce(dl,0)+coalesce(zz,0)) as sumscore,t2.realname FROM myphpcj.grades as t1 ,users as t2 where t1.userid=t2.id and exam_id=".$exam_id." order by sumscore desc";
これは、大まかな説明です。成績表、t2 はユーザー表です。一部の科目に参加しなかったか、この試験に参加しなかった学生がいたため、2 つのテーブルを共同でクエリして、試験の各学生の名前、学生番号、スコア、合計スコアを取得し、最終的に合計スコアで並べ替えます。では、mysqlのCoalesce関数を使用してnull値を処理しました。これまでジョイント テーブル クエリを使用することはほとんどありませんでしたが、この試用後、ジョイント テーブル クエリによって多くのプログラム ロジックが簡素化され、プログラムの効率が向上することがわかりました。今回、データベース設計においていくつかの外部キーが使用されましたが、これはプログラムの例外処理を簡素化する上で大きな役割を果たしたと言えます。一言で言えば、データベース開発についての理解が深まったと感じます。
2. ファイルを保存するときに重複した名前を避けるユーザースコアをインポートしたいので、私の考えは、最初にファイルをファイルディレクトリにアップロードし、次にファイルのコンテンツを読んで情報をインポートすることです。すべてのファイルに日付とタイムスタンプの名前を付けたいのですが、これには同じ日にアップロードされた複数のファイルを上書きするという問題が発生します。最終的に、ファイルのアップロード後にアップロード順序 1、2、3... を追加する方法を思いつきました。同じ日に。同時に、ファイルが途中で削除された場合、後でアップロードされたファイルがこの数値の位置を埋めます。そのため、次の処理がアップロード コードに追加されました:
rrree
最終的な効果は次のようになります:
他のいくつかの関数も比較的単純なので、ここでは詳しく説明しません。セキュリティに関しては、私には関連した経験がないので、SQL インジェクションを避けるためにすべてのフォームで特殊文字をフィルタリングし、ブルート フォース クラッキングを防ぐためにユーザー ログインの失敗したログイン数を記録しています。 XSS に関しては、Web サイトは外部登録を提供しておらず、閉鎖性が高いため、あまり考慮されていません。
最後に書きました私はこれまで .net を使って Web を開発していました。今回は、w3school の php チュートリアルを 2 日間見ました (ここでこの Web サイトを褒めたいと思います。よくわからない場合は、チュートリアルのコンテンツである Baidu を参照してください)。最終的に、この作業に 3 日間費やしましたが、機能は比較的シンプルで、インターフェイスの効果は平均的でしたが、それでもかなり満足のいくスキルを追加できました。 , 一方で、これら 2 つのテクノロジーについても簡単に紹介しましたが、比較すると、PHP は HTML や JS と組み合わせて使用する方がフロントエンドが比較的容易で、開発効率が高いと個人的には思います。ただし、結局はスクリプト言語であり、セキュリティは .net ほど良くありません。より包括的な機能を備えた大規模なシステムにはさまざまな脆弱性が存在します。 。効率に関しては、私はテストしたことがないので何も言えません。もちろん、これは単なる個人的な意見です。そうでなければ、これほど普及することはありません。皆さんもぜひ、さまざまな意見を交換し、議論してください。最後に、プロジェクトはオープンソースです https://code.google.com/p/phpscores/