Comments
Description
Transcript
PHPとPostgresqlを用いた 図書館管理システムの構築
PHPとPostgresqlを用いた 図書館管理システムの構築 裘 彬濱Qiu Binbin 南山大学 情報理工学部 1:要求分析 要求として、以下の 3 つを挙げる ●PHP と postgresql を用いた図書管理システムを構築したい ●本の追加、削除、貸出、返却、未返却会員情報検索といった5つの機能を欲しい この 3 つの点から、データベースとウエブ、2 つの面に分けて考える [1]データベースに対する要求分析 ●図書管理データベースを構築したい ●データベースの情報として,本の情報、貸出情報が必要 ●本の情報として,ISBN、タイトル、著者が必要 ●貸出情報として,本の ISBN の他に、会員情報と貸出日が必要 ●会員情報として,会員 ID、会員名、住所、電話番号が必要 本、会員に関して以下の制約があるとする ●同名の本が複数あり、ISBN によって識別されている ●同名の会員が複数おり、会員 ID によって識別されている ●会員が複数の本を借りられる 必要なデータは下記のようになる ●本:ISBN、タイトル、著者 ●会員:会員 ID、会員名、電話番号、住所 ●その他:貸出日 [2]ウェブページに対する要求分析 ●機能実行コマンドは手入力か?選択させるか?選択させるなら、どうのようなやり方で するか? ●入力された情報が間違いを確認するか?しないか? ●図書館にない本の情報や存在しない会員情報を入力された時どうするか? を考えて、下記のようにして明確にする。 ●機能実行コマンドはラジオボタンで選択させる ●本の情報の「追加」「削除」の場合、本の ISBN、タイトル、著者を入力させ,「実 行」ボタンを押すと、入力内容を確認させた後、「追加」/「削除」を実行する ●本の情報の「追加」「削除」の場合、未入力/入力ミスがあった時、エラーを表示する ●本の貸出/返却の場合、本の ISBN と会員 ID を入力させ,「実行」ボタンを押すと、入 力内容を確認させた後、「貸出」/「返却」を実行する ●本の貸出/返却の場合、未入力/入力ミスがあった時、エラーを表示する ●未返却会員情報を検索する場合、会員 ID を入力させ、「検索」ボタンを押すと、結果 を表示する ●未返却会員情報を検索する場合、未入力/入力ミスがあった時、エラーを表示する 2:設計(データベースとページを分けて設計する) [1]:データベースの設計 ●本に関する情報(例えば、以下のような情報があるとする)をデータベースで表として登 録すると,以下のようになる. ISBN 書名 著者 貸出日 会員 id 会員名 住所 12345 吾輩は猫である 夏目漱石 2012 年 11 月 19 54321 雪国 川端康成 日 10000 あ LI 2012 年 12 月 10 121212 名人 川端康成 56789 戦い Bush 11111 動物 田中一 日 2012年12月 11日 2012 年 12 月 15 日 電話番号 2222222 2 A 岐阜市 a 場所 1 Qiu 名古屋市中村区 1111111 4 C 三重県 x 場所 3 B 名古屋市 x 場所 3333333 4444444 データベースに登録する際,複数の項目に共通するデータとしてまとめて データを入れ ることはできないため,正規化(第一正規化)し、以下の表を得られる。 ISBN 12345 書名 著者 吾輩は猫で 夏目漱 ある 石 54321 雪国 10000 あ 121212 名人 川端康 成 LI 川端康 成 貸出日 会員 id 会員名 住所 電話番号 2012 年 11 月 19 日 2 A 岐阜市 a 場所 2222222 2012 年 11 月 19 日 2 A 岐阜市 a 場所 2222222 2012 年 12 月 10 日 1 Qiu 2012 年 12 月 10 日 1 Qiu 名古屋市中村 区 名古屋市中村 区 1111111 111111 56789 戦い Bush 2012年12月11日 4 C 三重県 x 場所 4444444 11111 動物 田中一 2012 年 12 月 15 日 3 B 名古屋市 x 場所 3333333 このデータベースの第一正規形では,冗長な値が多いので,ある列の値が決まれば, 他 の列の値が決まるように分割する(第二正規化) 会員データ(users)(主キー:会員id) 会員 id(user_id) 名前 (name) 住所(address) 電話番号(tel) 1 Qiu 名古屋市中村区 1111111 2 A 岐阜市 a 場所 3 B 名古屋市 x 場所 3333333 4 C 三重県 x 場所 2222222 4444444 本のデータ(book)(主キー:ISBN) ISBN(ISBN) 書名(title) 著者(author) 12345 吾輩は猫である 夏目漱石 54321 雪国 川端康成 10000 あ LI 121212 名人 川端康成 56789 戦い Blue 11111 動物 田中一 貸出データ(borrow)(主キー:会員idとISBN,外部キー:会員id , ISBN) 会員 id ISBN (user_id) (ISBN) 貸出日(borrow_date) 2 12345 2012 年 11 月 19 日 2 54321 2012年11月19日 1 10000 2012 年 12 月 10 日 1 121212 2012 年 12 月 10 日 4 56789 2012年12月11日 3 11111 2012年12月15日 第三正規化を行う.各表において, 主キーとなる列以外の値によって,他の列の値が決 まることがないようにする. 上の3つのテーブルでは既に第三正規形になっている. これらをER図にすると、以下のようになる 会員 図書 貸出 ID 名前 ISBN 貸出日 タイトル 住所 電話番号 著者 [2]ページの設計 (1)要求分析を基づいて、必要なページを洗い出す。 ●本の情報の作成/削除ページ → 確認ページ/エラーページ → 実行結果/実行エ ラー表示ページ ●本の貸出/返却ページ → 確認ページ/エラーページ → 実行結果/実行エラー表示 ページ ●未返却会員情報検索ページ → 確認ページ/エラーページ → 実行結果表示ページ (2)各ページの表示 1-a:本の情報の作成/削除ページ: タイトル:図書管理システム 文字の大きさ:サイズ12 色:黒 レイアウト:<table>を用いる 1-b:本の情報の作成/削除の確認ページ タイトル、文字の大きさ、色、レイアウトは1-aと同様、「戻る」リンクを付ける 「書き直す」ボタンと「次に進む」ボタンを作成する 1-c:本の情報の作成/削除のエラーを表示ページ タイトル、文字の大きさ、色は1-aと同様 2-a:貸出/返却ページーーーー 1-aと同様 2-b:貸出/返却確認ページーーーー1-bと同様 2-c: 貸出/返却のエラーを表示ページーーーー1-cと同様 3-a: 未返却会員情報検索ページーーーー 1-aと同様 3-b:未返却会員情報検索確認ページーーーー1-bと同様 3-c:未返却会員情報検索のエラー表示ページーーーー1-cと同様 4:実行結果表示ページ タイトル:図書管理システム---- 「コマンド名」ページ 文字の大きさ:サイズ12 色:黒 「管理画面に戻る」リンクを付ける 5:実行エラー表示ページーーーー4と同様 (3)各ページ間の関係を明確にする ●作成/削除に関するページ間関係 作成 / 削除ページ 作成 / 削除確認ページ 実行結果表示ページ 図書管理システム 図書管理システム -- 作成 / 削除ページ データベースに正常に登録 / 削除されました 管理画面に戻る 作成 / 削除エラーページ 実行エラー表示ページ 図書管理システム -- 作成 / 削除ページ エラー表示 管理画面に戻る ●貸出/返却に関するページ間の関係 貸出 / 返却ページ 貸出 / 返却確認ページ 実行結果表示ページ 図書管理システム 図書管理システム -- 貸出 / 返却ページ データベースに正常に更新されました 管理画面に戻る 貸出 / 返却エラーページ 実行エラー表示ページ 図書管理システム -- 作成 / 削除ページ エラー表示 管理画面に戻る ●未返却会員情報検索に関するページ間の関係 未返却会員情報検索ページ 未返却会員情報検索確認ページ 実行結果表示ページ 図書管理システム 図書管理システム -- 未返却会員検索ページ 会員情報 管理画面に戻る 未返却会員情報検索エラーページ 実行エラー表示ページ 図書管理システム -- 作成 / 削除ページ エラー表示 管理画面に戻る 3:実装 [1]データベースの実装 ●会員表、図書表、貸出表、本の未返却会員Viewを作成する (1)会員表の定義 create table users(user_id int primary key,name text,adr text,tel text); (2)図書表の定義 create table book(isbn int primary key, title text, author text); (3)貸出表の定義 create table borrow(user_id int references users,isbn int references book,borrow_date text); (4)本の未返却会員Viewの定義 create view not_return_user as select title,borrow_date,users.user_id,users.name,users.adr,users.tel from users join borrow on users.user_id=borrow.user_id join book on borrow.isbn=book.isbn; [2]ページの実装 ●本の情報作成/削除ページ、貸出/返却ページ、未返却会員情報検索ページを1つのペー ジにまとめる ● 「実行」ボタン/「検索」ボタンをクリックした後に、動作させることができるのは1 つのプログラムなので、本の情報作成/削除確認ページと作成/削除のエラー表示ページを 分けることはできない。従って、作成/削除確認ページと作成/削除のエラー表示ページを 1つのプログラムに記述する必要がある。 同様に貸出/返却確認ページとエラー表示ページを1つのページにまとめる、未返却会員 情報検索確認ページとエラー表示を1つのページにまとめる ●それぞれの確認ページの「次に進む」ボタンをクリックした後に「動作させることがで きるのは1つのプログラムなので、実行結果表示ページと実行エラー表示ページを分ける ことができない。従って、実行結果表示ページと実行エラー表示ページを1つのプログラ ムに記述する必要がある。 以上3点より各ページ間の関係が次のページのようになる。 confirm.php 作成 / 削除確認ページ 作成 / 削除エラーページ sub_index.php confirm2.php 貸出 / 返却確認ページ result.php 実行結果表示ページ ...... ...... 管理画面に戻る 貸出 / 返却エラーページ 実行結果エラーページ エラー表示 ...... ...... 管理画面に戻る confirm3.php 未返却会員情報検索確認ページ 未返却会員情報検索エラーページ ●入力ページ(sub_index.html) <html> <head> <meta http-eqiv="Content-Type" content="text/html; charset=utf-8"> <title>図書管理画面</title> </head> <body> <h1>図書管理システム</h1> <?php echo <<<EOD <table border="1"> <tr><td> <form action="confirm.php" method="POST"> 図書情報の</br> <input type="radio" name="command" value="作成"/>作成 <input type="radio" name="command" value="削除"/>削除 </td><td> <table> <tr><td>ISBN</td><td><input type="text" name="isbn"></td></tr> <tr><td>タイトル</td><td><input type="text" name="title"></td></tr> <tr><td>著者</td><td><input type="text" name="author"></td></tr> </td></tr> </table><input type="submit" value="実行"></form> <tr><td><form action="confirm2.php" method="POST"> <input type="radio" name="command" value="貸出">貸出 <input type="radio" name="command" value="返却">返却 </td><td> <table> <tr><td>ISBN</td><td><input type="text" name="isbn"></td></tr> <tr><td>会員ID</td><td><input type="text" name="user_id"></td></tr> </table><input type="submit" value="実行"></form></td> <tr><td>未返却会員情報検索<form action="confirm3.php" method="POST"></td> <td><table> <tr><td>会員ID</td><td><input type="text" name="user_id"> </table> <input type="submit" value="検索"></form></td></tr> EOD; ?> </body> </html> ● 作成/削除確認ページ(confirm.php) <html> <head> <meta http-eqiv="Content-Type" content="text/html; charset=utf-8"> <title>図書管理画面</title> </head> <body> <h1>図書管理システム</h1> <?php if(empty($_POST['command'])||empty($_POST['isbn'])||empty($_POST['title'])|| empty($_POST['author'])){ echo("未記入欄があります<br/>"); echo("もう一度やりなおしてください<br/>"); echo("<a href=\"sub_index.php\">戻る</a><br/>"); die(); } $command=$_POST['command']; $isbn=$_POST['isbn']; $title=$_POST['title']; $author=$_POST['author']; echo <<<EOD <p>以下の内容で宜しいですか?</p> <a href="sub_index.php"><button>書き直す</button></a> <table border="1"> <form action="result.php" method="POST"> <input type="hidden" name="command" value=$command> <tr><td>ISBN</td><td>$isbn<input type="hidden" name="isbn" value=$isbn></tr> <tr><td>タイトル</td><td>$title<input type="hidden" name="title" value=$title></td></tr> <tr><td>著者</td><td>$author<input type="hidden" name="author" value=$author></td></tr> </td></tr><input type="submit" value="次に進む"></form></table> EOD; ?> </body> </html> ●貸出/返却確認ページ(confirm2.php) <html> <head> <meta http-eqiv="Content-Type" content="text/html; charset=utf-8"> <title>図書管理画面</title> </head> <body> <h1>図書管理システム</h1> <?php if(empty($_POST['command'])||empty($_POST['isbn'])|| empty($_POST['user_id'])){ echo("未記入欄があります<br/>"); echo("もう一度やりなおしてください<br/>"); echo("<a href=\"sub_index.php\">戻る</a><br/>"); die(); } $command=$_POST['command']; $isbn=$_POST['isbn']; $user_id=$_POST['user_id']; echo <<<EOD <p>以下の内容で宜しいですか?</p> <a href="sub_index.php"><button>書き直す</button></a> <table border="1"> <form action="result.php" method="POST"> <input type="hidden" name="command" value=$command> <tr><td>ISBN</td><td>$isbn<input type="hidden" name="isbn" value=$isbn></tr> <tr><td>会員ID</td><td>$user_id<input type="hidden" name="user_id" value=$user_id></td></tr> </td></tr><input type="submit" value="次に進 む"></form></table> EOD; ?> </body> </html> ●未返却会員情報検索確認ページ(confirm3.php) <html> <head> <meta http-eqiv="Content-Type" content="text/html; charset=utf-8"> <title>図書管理画面</title> </head> <body> <h1>図書管理システム</h1> <?php if(empty($_POST['user_id'])){ echo("会員IDが未記入です<br/>"); echo("もう一度やりなおしてください<br/>"); echo("<a href=\"sub_index.php\">戻る</a><br/>"); die(); } $user_id=$_POST['user_id']; echo <<<EOD <p>以下の内容で宜しいですか?</p> <a href="sub_index.php"><button>書き直す</button></a> <table border="1"> <form action="result.php" method="POST"> <input type="hidden" name="command" value="未返却会員検索"> <tr><td>会員id</td><td>$user_id<input type="hidden" name="user_id" value=$user_id></tr> </td></tr><input type="submit" value="次に進む"></form></table> EOD; ?> </body> </html> ●実行結果表示ページ(result.php) <html> <head> <meta http-eqiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <h1>図書管理システム--<?php echo( $_POST['command']); ?>ページ</h1> <?php $pg_cn = pg_connect("dbname=q_libary"); if (!$pg_cn) { die("データベースに接続できませんでした"); } $isbn=$_POST['isbn']; $user_id=$_POST['user_id']; $borrow_time=date("Y-m-d"); $return_time=$_POST['return_date']; //返却 if($_POST['command']=="返却"){ $rt2 = pg_query($pg_cn, "select * from borrow where user_id='$user_id'"); $rt2_num = pg_numrows($rt2); if($rt2_num==0){ echo("貸出情報が存在しません<br/>"); echo("もう一度やりなおしてください<br/>"); }else{ $rt1 = pg_query($pg_cn, "delete from borrow where isbn='$isbn'"); $rt1_num = pg_numrows($rt1); if ($rt1_num==0) { echo("貸出情報が存在しません<br/>"); echo("もう一度やりなおしてください<br/>"); }else echo("データベースに正常に更新されました<br/>"); }} //貸出 if($_POST['command']=="貸出"){ $sql="insert into borrow values('$user_id','$isbn','$borrow_time');"; $rt = pg_query($pg_cn, $sql); if (!$rt) { echo("データベースに更新できませんでした<br/>"); echo("もう一度やりなおしてください<br/>"); }else { echo("データベースに正常に更新されました<br/>"); }} $isbn=$_POST['isbn'];$title=$_POST['title'];$author=$_POST['author']; //新書追加 if($_POST['command']=="作成"){ $sql="insert into book values('$isbn','$title','$author')"; $rt = pg_query($pg_cn, $sql); if (!$rt) { echo("データベースに登録できませんでした<br/>"); echo("もう一度やりなおしてください<br/>"); } else echo("データベースに正常に登録されました<br/>"); } //本の削除 if($_POST['command']=="削除"){ $sql="delete from book where isbn='$isbn'"; $rt = pg_query($pg_cn, $sql); $rt_num = pg_numrows($rt); if ($rt_num==0) { echo("データは存在しません<br/>"); echo("もう一度やりなおしてください<br/>"); } else echo("データは正常に削除されました<br/>"); } //検索削除 if($_POST['command']=="未返却会員検索"){ $user_id=$_POST['user_id']; $sql="select * from users where user_id='$user_id'"; $rt = pg_query($pg_cn, $sql); $rt_num = pg_numrows($rt); $sql="select * from not_return_user where user_id='$user_id'"; $rt2 = pg_query($pg_cn, $sql); $rt2_num = pg_numrows($rt2); if ($rt_num==0) { echo("会員ID:".$user_id."が存在しません<br/>"); echo("<a href=\"sub_index.php\">管理画面に戻る</a><br/>"); die(); }else if($rt_num==0){ echo("会員ID:".$user_id."に関する情報がありません<br/>"); echo("<a href=\"sub_index.php\">管理画面に戻る</a><br/>"); } else{ $num=pg_num_rows($rt2); echo <<<EOD <table border="1"><tr> <td>ISBN</td><td>タイトル</td><td>会員ID</td> <td>会員名</td><td>住所</td><td>電話番号</td> </tr> EOD; for($i=0;$i<$num;$i++){ $rt_info=pg_fetch_array($rt2,$i); echo("<tr><td>$rt_info[0]</td><td>$rt_info[1]</td><td>$rt_info[2]</td>"); echo("<td>$rt_info[3]</td><td>$rt_info[4]</td><td>$rt_info[5]</td></tr>"); } } } echo("<a href=\"sub_index.php\">管理画面に戻る</a><br/>"); ?> </body> </html> [3]ページからデータベースに接続を許可する grant select on users to "www-data"; grant delete,select,insert on book to "www-data"; grant delete,select,insert on borrow to "www-data"; grant select on not_return_user to "www-data"; 4:テスト [1]データベースのテスト (1)会員表にデータを挿入する insert into users values('1', 'Qiu','名古屋市中村区','1111111'); insert into users values('2', 'A','岐阜市a場所','2222222'); insert into users values('3', 'B','名古屋市x場所','3333333'); insert into users values('4', 'C','三重県x場所','4444444'); 結果表示 select * from users; user_id | name | adr | tel ---------+------+----------------+--------1 | Qiu | 名古屋市中村区 | 1111111 2|A | 岐阜市a場所 | 2222222 3|B | 名古屋市x場所 | 3333333 4|C | 三重県x場所 | 4444444 (4 rows) (2)図書表にデータを挿入する insert into book values('12345','吾輩は猫である','夏目漱石'); insert into book values('54321','雪国','川端康成'); insert into book values('10000','あ','LI'); insert into book values('121212','名人','川端康成'); insert into book values('56789','戦い','Blue'); insert into book values('11111','動物','田中一'); 結果表示 select * from book; isbn | title | author --------+----------------+---------- 111 | 1 | キュウ 12345 | 吾輩は猫である | 夏目漱石 54321 | 雪国 | 川端康成 10000 | あ | LI 121212 | 名人 | 川端康成 56789 | 戦い | Blue 11111 | 動物 | 田中一 (7 rows) (3)貸出表にデータを挿入する insert into borrow values('2','12345','2012年11月19日'); insert into borrow values('2','54321','2012年11月19日'); insert into borrow values('1','10000','2012年12月10日'); insert into borrow values('1','121212','2012年12月10日'); insert into borrow values('4','56789','2012年12月11日'); insert into borrow values('3','11111','2012年12月15日'); 結果表示 select * from borrow; user_id | isbn | borrow_date ---------+--------+---------------2 | 12345 | 2012年11月19日 2 | 54321 | 2012年11月19日 1 | 10000 | 2012年12月10日 1 | 121212 | 2012年12月10日 4 | 56789 | 2012年12月11日 3 | 11111 | 2012年12月15日 (6 rows) (4)本の未返却会員Viewの表示 select * from not_return_user; title | borrow_date | user_id | name | adr | tel ----------------+----------------+---------+------+----------------+--------吾輩は猫である | 2012年11月19日 | 2|A | 岐阜市a場所 雪国 | 2012年11月19日 | 2|A あ | 2012年12月10日 | 1 | Qiu | 名古屋市中村区 | 1111111 名人 | 2012年12月10日 | 1 | Qiu | 名古屋市中村区 | 1111111 戦い | 2012年12月11日 | 4|C | 三重県x場所 動物 | 2012年12月15日 | 3|B | 名古屋市x場所 | 3333333 (6 rows) | 岐阜市a場所 | 2222222 | 2222222 | 4444444 [2]データベースとウェブページ間のエラーテスト テスト項目 1:図書情報作成/削除欄に「作成」を選び、ISBN欄にデータベースに既に存在するISBNを、 タイトル欄と著者欄に文字列を入れ、実行ボタンをクリック →エラーページが表示されることを確認 2:図書情報作成/削除欄に「削除」を選び、ISBN欄にデータベースに既に存在しないISBN を、タイトル欄と著者欄に文字列を入れ、実行ボタンをクリック →エラーページが表示されることを確認 3:貸出/返却欄に「貸出」を選び、ISBN欄にデータベースに既に存在しないISBNを、会員 ID欄にデータベースに既に存在する会員IDを入れ、実行ボタンをクリック →エラーページが表示されることを確認 4:貸出/返却欄に「貸出」を選び、ISBN欄にデータベースに既に存在するISBNを、会員ID 欄にデータベースに既に存在しない会員IDを入れ、実行ボタンをクリック →エラーページが表示されることを確認 5:貸出/返却欄に「返却」を選び、ISBN欄にデータベースに既に存在しないISBNを、会員 ID欄にデータベースに既に存在する会員IDを入れ、実行ボタンをクリック →エラーページが表示されることを確認 6:貸出/返却欄に「返却」を選び、ISBN欄にデータベースに既に存在するISBNを、会員ID 欄にデータベースに既に存在しない会員IDを入れ、実行ボタンをクリック →エラーページが表示されることを確認 7:未返却会員情報検索について、会員ID欄にデータベースに既に存在しない会員IDを入れ、 実行ボタンをクリック →エラーページが表示されることを確認 テスト結果 1:図書情報作成/削除欄に「作成」を選び、ISBN欄に111を、タイトル欄にq、著者欄に にwを入れた結果、正しくエラーページが表示された 2:図書情報作成/削除欄に「削除」を選び、ISBN欄に9999を、タイトル欄にq、著者欄に にwを入れた結果、正しくエラーページが表示された 3:貸出/返却欄に「貸出」を選び、ISBN欄に9999を、会員ID欄に 1を入れ結果、正しく エラーページが表示された 4:貸出/返却欄に「貸出」を選び、ISBN欄に111を、会員ID欄に9を入れた結果、正しく エラーページが表示された 5:貸出/返却欄に「返却」を選び、ISBN欄に9999を、会員ID欄に 1を入れ結果、正しく エラーページが表示された 6:貸出/返却欄に「返却」を選び、ISBN欄に111を、会員ID欄に9を入れた結果、正しく エラーページが表示された 7:未返却会員情報検索について、会員ID欄に9を入れた結果、正しくエラーページが表示 された [3]ウェブページのテスト テスト項目 1:図書情報作成/削除欄に実行命令を一つ選び、ISBN欄に数値を、タイトル欄と著者欄に 文字列を入れ、実行ボタンをクリック →入力された本の情報に基づき、本の情報を作成/削除されることを確認する。 2:図書情報作成/削除欄に実行命令を選ばず、ISBN欄に数値を、タイトル欄と著者欄に文 字列を入れ、実行ボタンをクリック →エラーページが表示されることを確認 3:図書情報作成/削除欄に実行命令を一つ選び、ISBN欄に数値以外を、タイトル欄と著者 欄に文字列を入れ、実行ボタンをクリック →エラーページが表示されることを確認 4:図書情報作成/削除欄に実行命令を一つ選び、ISBN欄を空欄に、タイトル欄と著者欄に 文字列を入れ、実行ボタンをクリック →エラーページが表示されることを確認 5:図書情報作成/削除欄に実行命令を一つ選び、ISBN欄に数値を、著者欄に文字列を入れ、 タイトル欄を空欄に、実行ボタンをクリック →エラーページが表示されることを確認 6:図書情報作成/削除欄に実行命令を一つ選び、ISBN欄に数値を、タイトル欄に文字列を 入れ、著者欄を空欄に、実行ボタンをクリック →エラーページが表示されることを確認 7:貸出/返却欄に実行命令を一つ選び、ISBN欄と会員ID欄に数値を入れ、実行ボタンをク リック →入力したISBNと会員IDより、貸出/返却されること確認。 8:貸出/返却欄に実行命令を選ばず、ISBN欄と会員ID欄に数値を入れ、実行ボタンをク リック →エラーページが表示されることを確認 9:貸出/返却欄に実行命令を一つ選び、ISBN欄を空欄に、会員ID欄に数値を入れ、実行ボ タンをクリック →エラーページが表示されることを確認 10:貸出/返却欄に実行命令を一つ選び、会員ID欄を空欄に、ISBN欄に数値を入れ、実行 ボタンをクリック →エラーページが表示されることを確認 11:貸出/返却欄に実行命令を一つ選び、ISBN欄を数値に、会員ID欄に数値以外を入れ、 実行ボタンをクリック →エラーページが表示されることを確認 12:貸出/返却欄に実行命令を一つ選び、会員ID欄を数値に、ISBN欄に数値以外を入れ、 実行ボタンをクリック →エラーページが表示されることを確認 13:未返却会員情報検索の方、会員ID欄に数値を入れ、検索ボタンをクリック →入力した会員IDより、結果表示されることを確認 14:未返却会員情報検索の方、会員ID欄に数値以外を入れ、検索ボタンをクリック →エラーページが表示されることを確認 テスト結果 1-1:「作成」を選び、ISBN欄に1111を、タイトル欄にソフトを、著者をAを入力した結 果、正しく作成された。 1-2:「削除」を選び、ISBN欄に1111を、タイトル欄にソフトを、著者をAを入力した結 果、正しく削除された。 2:ISBN欄に1111を、タイトル欄にソフトを、著者をAを入力した結果、実行命令を得た んでいないため、正しくエラーページが表示された。 3:「作成」を選び、ISBN欄にABCを、タイトル欄にソフトを、著者をAを入力した結果、 正しくエラーページが表示された。 4:「作成」を選び、タイトル欄にソフトを、著者をAを入力した結果、正しくエラーペー ジが表示された。 5:「作成」を選び、ISBN欄に1111を、著者をAを入力した結果、正しくエラーページが 表示された。 6:「作成」を選び、ISBN欄に1111を、タイトル欄にソフトを入力した結果、正しくエ ラーページが表示された。 7-1:貸出を選び、ISBN欄に1111、会員IDに2を入れた結果、正しく実行されました。 7-2:返却を選び、ISBN欄に1111、会員IDに2を入れた結果、正しく実行されました。 8: ISBN欄に1111、会員IDに2を入れた結果、正しくエラーページが表示された。 9:貸出を選び、会員IDに2を入れた結果、正しくエラーページが表示された。 10:貸出を選び、ISBN欄に1111を入れた結果、正しくエラーページが表示された。 11:貸出を選び、ISBN欄に1111、会員IDにABCを入れた結果、正しくエラーページが表 示された。 12:貸出を選び、会員IDに2を、ISBN欄にABCを入れた結果、正しくエラーページが表示 された。 13:未返却会員情報検索の方、会員ID欄2を入れた結果、正しく実行されました。 14:未返却会員情報検索の方、会員ID欄にABCを入れた結果、正しくエラーページが表示 された。