解説 10月(6)

今回の学習項目です。


課題1

アカウント

情報システムを構築する上で、個人を特定しその情報を扱うことが問題になります。 例えば、たくさんの人が参加できるネット上のゲームのシステムを作る場合を考えれば、ゲームの参加者のアカウントを用意し、それを使って得点をどれほど獲得しているかなどいろいろな状態を保持しておくことが必要になります。 ゲームにログインするときの、名前やパスワードも必要です。 アカウントを扱うことを題材にして、情報システム構築の基本を学びましょう。

課題1-1-1

ネットゲームの参加者のアカウントを管理するシステムを構築することを念頭において、アカウントとパスワードを検証する部分をまず作成します。
これを、以下の説明にあるように、ゲームにログインする際にアカウントがあるかどうかをチェックするものです。 verifyAccount()という関数を使って、実現しますが、ここではその関数を実現するために、まず、その手順書を作成してください。
やりとりの出力は以下のようになります。

*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***
アカウント:中京太郎
パスワード:aaa123

ようこそ、中京太郎さん。それではゲームを始めましょう。

パスワードが合わない場合は、次のようなメッセージを出します。

*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***
アカウント:中京太郎
パスワード:aaabbb

パスワードが間違っているようです。

アカウントがない場合は、次のようなメッセージを出します。

*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***
アカウント:中京三郎
パスワード:aaabbb

中京三郎というアカウントはありません。

アカウント名とパスワードはファイルに入れておいて管理することにします。 次のようなファイルを作成して、それを参照することで、上記の検証を行うプログラムを実現します。

アカウントデータ(文字コードはEUC-JPで保存されています。)

このプログラムを、次のようなverifyAccount()という関数を使って実現することにします。

def verifyAccount(account, password)
  #
  #パスワードが正しい場合はtrueを、
  #パスワードが間違っている場合はfalseを、
  #アカウントがない場合はnilを返す。
  #
end

print "*** ログインしてください。自分のアカウント名とパスワードを入力してください。 ***\n"
print "アカウント:"
account = gets.chop
print "パスワード:"
password = gets.chop

result = verifyAccount(account, password)
...

関数verifyAccount()の手順書を作成しなさい。
ファイルの中に格納されている個々のアカウントデータをいったん配列の中に読み出し、その配列の中からアカウント名とパスワードをwhileなどの「繰り返し」を使って取り出します。

[手順書をどう書くか]

プログラムの構造を分かりやすく表現すればよい。 そのために手順書では、「linesという変数に、readlinesを使ってファイルの情報を配列の中に読み出す。」など、メソッド名を使って記述する方が分かりやすくなる。 どのように書けばよいか、見当がつかない場合には相談してください。

課題1-1-2

課題1-1-1で作成した手順書にしたがって、実際に、プログラムを作成し、動作を確認して報告しなさい。

課題1-2-1

次は、新しいアカウントを登録するプログラムです。 次のようなやり取りをするプログラムを作成するために、createAccount()という関数を作ることにします。 まずその関数を実現する手順書を作成してください。

アカウントを作ります。アカウント名とパスワードを入力してください。
アカウント:八事花子
パスワード:ygt875

アカウントを作成しました。

同じアカウント名がすでに登録されている場合には、次のようなメッセージを出すことにします。

アカウントを作ります。アカウント名とパスワードを入力してください。
アカウント:中京太郎
パスワード:aaabbb

中京太郎というアカウントはすでにあります。別なアカウント名を使ってください。

これも、課題1-1と同様に関数を使って実現することにします。 createAccount()という名前にしてください。 すでに同じアカウント名が登録されている場合に、チェックすることが必要です。 新しいアカウントはファイルの終わりに付け加えることにします。

$KCODE = "e"
def createAccount(account,password)
  #
  #アカウントを作成できたらtrueを、
  #作成できなかったらfalseを返す。
  #
end

print "アカウントを作ります。アカウント名とパスワードを入力してください。"
print "アカウント:"
account = gets.chop
print "パスワード:"
password = gets.chop

result = createAccount(account,password)
...

[ファイルに新しい行を付け加えるには]

ファイルを追加書き込みモードで開くときは、openの第二引数に "a" という文字列を指定します。

fo = open("ファイル名", "a")

"w" でファイルを開いた場合は上書きになりますから、読み込んであるデータをもう一度全部書き出さなければいけません。 "w" の代わりに "a" を使うと、ファイルの最後に付け加えるだけになります。

課題1-2-2

課題1-2-1で作成した手順書にしたがって、実際に、プログラムを作成し、動作を確認して報告しなさい。
付け加えたものが正しく入っているかどうかは、ファイルの内容を調べたり、課題1-1で作成したプログラムで検証してください。

プログラミングIIIのホームに戻る