ガル白の憂鬱

仮想現実の世界をガル白として生きた管理人が、現実世界の出来事を記録するものです。

俺の歴史に・・・また1ページ・・・(-ω-)

2006年09月13日 23時29分35秒 | Weblog
ワシは飽きっぽいのである(-ω-)
以前作成したスケジュール管理システム「スケジュール番長.NET」であるが、まだまだ修正しないと実用に耐えられるレベルではない。
携帯電話対応を筆頭に、その他もろもろの細かい修正がたくさん残っているのである。
でもなんだか一度動くと飽きてしまい、とりあえず放置していたのだが、先日開催されたサークルの新人歓迎会で、みんなから「とっとと完成させろ(゜д゜ )」と励ましの言葉をいただき、重い腰を上げてみた。

久しぶりにプログラムコードを見ると、自分で書いておきながら何を書いているのかよく分からん状態(-ω-)
しばらく眺めて思い出すのに一苦労である。

とりあえず今日はユーザ情報の更新機能と、ユーザ削除機能を追加してみた。
今回のブログでは、それぞれの機能をどのように考えてどのようにプログラムしたかを綴っておくことにする。
はっきり言って、面白いネタは何もない(-ω-)
プログラムとかWebシステムに興味のある人は続きを読むといいかもしれん。
内容を理解できれば、あなたはまぁまぁプログラマに向いているかもしれん。

まずユーザ情報更新機能について。
これは、新規ユーザ登録時に登録したユーザ情報を、各自が更新できる機能。
ユーザ情報には、
・名前
・アカウント
・パスワード
・メールアドレス(今回新規に追加)
の4つがある。

さて、これらをユーザに更新させる際に一番注意しなくてはいけないのは何か?
それは、アカウントが他のユーザと重複しないようにすることである。
アカウントというのは、ログイン時にパスワードとセットで入力し、データベースから該当するユーザ情報を引っ張ってくるために使うものだ。
もしAさんとBさんのアカウントが重複すると、BさんがログインしたときにAさんの情報を引っ張ってくる可能性がある。
これだと困るので、データベース上で同じアカウントが登録されることは避けなければならない。

そこで、更新ボタンが押された際に既にデータベースに同じアカウントが登録されていたら、他のアカウントを入力してもらうようにメッセージを出す処理を入れるのだ。
プログラミング言語のC#では以下のように書く。

//個人情報の更新ボタンが押されたときの処理
protected void Button1_Click(object sender, EventArgs e)
{
int userId = Convert.ToInt32(Session["Login.aspx.id"]);
string userName = TextBox1.Text;
string userAccount = TextBox2.Text;
string userPassword = TextBox3.Text;
string email = TextBox4.Text;
string oldAccount ="";

ScheduleBusinessComponent bc = new ScheduleBusinessComponent();
oldAccount = bc.getUserDataByUserId(userId)[0].user_account;

//登録済みアカウントの重複チェック
if ((bc.isExistAccount(userAccount)) && (oldAccount.Equals(userAccount) == false))
{
//エラー画面へ遷移
Response.Redirect("~/Error/wAccountError.aspx");
}
else
{
bc.updateUserTable(userId, userName, userAccount, userPassword, email);

Response.Redirect("RegistrationComplete.aspx");
}

}

1行ずつ解説しよう(-ω-)
今日は長い夜になりそうだ・・・
まず1行目
protected void Button1_Click(object sender, EventArgs e)
これは、画面上にあるButton1というIDを持つボタンがクリックされたら{}内の処理を実行してくださいよ~という命令。

次の行
int userId = Convert.ToInt32(Session["Login.aspx.id"]);
これは数値型の変数userIdってやつに、現在ログインしているユーザのユーザIDを入れてね~って命令。
Session["Login.aspx.id"]ってのがユーザIDが入っている場所で、Convert.ToInt32で、それを数値型に変換しろよっていってる。

その次の数行
string userName = TextBox1.Text;
string userAccount = TextBox2.Text;
string userPassword = TextBox3.Text;
string email = TextBox4.Text;
string oldAccount ="";

これは、画面の各テキストボックスに入っている値を文字列型の各変数に入れてね~って命令。
ここで取得した値をデータベースに渡して更新するのだ。

次の2行
ScheduleBusinessComponent bc = new ScheduleBusinessComponent();
oldAccount = bc.getUserDataByUserId(userId)[0].user_account;

これは、このクラスと別の場所に書いている処理を使うためにScheduleBusinessComponentクラスをインスタンス化している。
getUserDataByUserId(userId)というメソッド(関数)はワシが勝手に作ったメソッドで、ユーザIDを渡すと該当するユーザの情報をテーブルで返してくれるもの。
そいつの中にあるuser_accountを取得してoldAccountに入れている。
なんでこんなことをしてるかは後述。

次からは条件分岐。
ここで重複チェックをしている。
if ((bc.isExistAccount(userAccount)) && (oldAccount.Equals(userAccount) == false))

これはもしもbc.isExistAccount(userAccount)が真実で、oldAccount.Equals(userAccount)がウソならば次の処理を実行しなさい、というもの。
isExistAccount(userAccount)というのもワシが勝手に作ったメソッドで、userAccountと同じものがデータベースにあったらfalse(ウソ)って返してくれる。
oldAccount.Equals(userAccount)というのは、oldAccountとuserAccountが等しいかどうかを比べている。
更新時には、必ず自分のアカウントはデータベースに登録されているはずなので、isExistAccountだけで判定すると、更新時にアカウントを変えずに名前を変えるといった処理ができなくなるため、わざわざこんな処理を入れているというわけ。

そして次、
Response.Redirect("~/Error/wAccountError.aspx");

これは、上記条件の時はエラーページに飛んでね、というもの。

次のelse以下は、if分の条件を満たさなかったときに実行される。
else
{
bc.updateUserTable(userId, userName, userAccount, userPassword, email);

Response.Redirect("RegistrationComplete.aspx");
}

この場合は、ユーザが入力した情報でデータベースを更新して、完了通知画面に遷移してねって言ってる。

分かった?(-ω-)
ワシも説明しててよくわからんくなった。

ということで、こんなしょぼい機能ひとつ作るだけでも、この小鳥のような脳みそをフル回転して作らないといけないのです。

(;´д⊂)だからもう少し待ってね、ちゃんと作るから・・・。