資料庫程式設計 – PHP+MySQL 第十三章 專題研討:課 務管理系統  上一頁    

 

13-5 學生課務系統

內容:

  • 13-5-1 系統功能

  • 13-5-2 範例研討:主選單製作

  • 13-5-3 範例研討:學生選課系統

  • 13-5-4 自我挑戰:學生退選系統

13-5-1 系統功能

吾人規劃『學生課務系統』具有下列功能:

n   依學生學號與課程名稱,選擇課程修讀。(13-4-3 )

n   依學生學號與選擇課程名稱,退選課程。(13-4-4 )

13-5-2 範例研討:主選單製作

(A) 系統功能:Student.html

請製作『學生課務統』的主選單,讓學生選擇、退選課程使用,功能如下: (超連結暫時連結 )

(B) 程式範例:Student.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>學生課務系統</title>

</head>

<body>

        ************************** <BR>

        *****   ***** <BR>

        ************************** <BR>

        <UL>

        <LI><a href = "http://www.tsnien.idv.tw" target="_blank"> 學生選課課程 </a><BR><BR>

        <LI><a href = "http://www.tsnien.idv.tw" target="_blank"> 學生退選課程 </a><BR><BR>

        <UL>

</body>

</html>

13-5-3 範例研討:學生選課系統

(A) 系統功能:SelCourse

系統需要一個可供學生選課的介面,為了讓使用者較方便輸入,學生姓名與開課課程都用選單方式,期望查詢網頁如下:

執行網頁的結果如下:

 (B) SQL 系統分析

學生選課資料登錄於 select_course 資料表內,須針對它做 Insert into 的命令操作。圖 12-1 是本系統的資料關係圖,選課必須登錄 student_ID open_course_ID 表示哪位學生修讀哪一門課。至於原來全校開課課程登錄於 open_course 資料表內,它每一個欄位都用代碼表示,很難知道課程名稱與開課教師、、等等資料。還好,我們有建立一個 public_course 視界,透過它就可以觀察出課程名稱、開課教師、、等等資料。製作提示如下:

12_1 學生選課資料關聯圖

(B) 網頁製作技巧

吾人依照上述 SQL 系統分析,規劃網頁如下:

各網頁說明如下:

(1) 表單網頁:開啟 public_course 視界,並將資料顯示於下拉選單上,挑選後傳送 open_course_ID 給執行網頁。另外,也開啟simple_students視界,顯示學生資料可供挑選,選擇後傳送 student_ID 給執行網頁。

(2) 執行網頁:利用收到的 student_ID open_course_ID 兩個訊息,做為指標,其餘欄位皆設定為 Null,插入 select_course 資料表內

(D) 表單網頁程式範例:SelCourse-form.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<?php

        $select_db = mysqli_connect("localhost", "root", "12345678", "course_db")

                or die("MySQL 伺服器連結失敗 <br>");

        // 查詢所有學生學號

        $sql_query1 = "select student_ID, name

                   from students";

        $result1 = mysqli_query($select_db, $sql_query1);

        // 查詢所有班級與編碼

        $sql_query2 = "select *

                   from public_course";

        $result2 = mysqli_query($select_db, $sql_query2);

   echo "<p><font size='3'> 學生選課系統 </font></p>";

   echo "<form name='表單' method='post' action='SelCourse-action.php'>";

        echo "選擇學生:";

        echo "<select name='student_ID'>";

        while($row=mysqli_fetch_row($result1)) {

            echo "<option value='$row[0]'> $row[1]($row[0])</option><BR>";

            }

        echo "</select>";

        echo "<BR><BR>";

                echo "選擇開課課程:";

        echo "<select name='open_course_ID'>";

        while($row=mysqli_fetch_row($result2)) {

            echo "<option value='$row[0]'> $row[2]($row[1])($row[3])

                              ($row[4])($row[5])($row[6])</option><BR>";

            }

        echo "</select>";

        echo "<BR><BR>";

                echo "<input type='submit' value='送出'>";

        echo "</form>";

    mysql_close($db_link);

?>

(E) 執行網頁程式範例:SelCourse-action.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<?php

        $student_ID = $_POST["student_ID"];

        $open_course_ID = $_POST["open_course_ID"];

        $select_db = mysqli_connect("localhost", "root", "12345678", "course_db")

                or die("MySQL 伺服器連結失敗 <br>");

        // 查詢開課課程教師

    $sql_query = "insert into select_course (student_ID, open_course_ID)

                                  values('$student_ID', '$open_course_ID')";

        $result = mysqli_query($select_db, $sql_query);

        if(!$result) {

                echo "選擇課程失敗 !! <BR>";

                exit();

        }

        $sql_query = "select *

                                  from select_course

                                  where student_ID = '$student_ID'";

        $result = mysqli_query($select_db, $sql_query);

        echo "選擇開課代碼:$open_course_ID 成功 <BR>";

        echo "$student_ID 學生目前選課情形 <BR>";

        $items = array("學號","開課代碼", "平時", "期中考", "期末考", "學期成績");

        echo "<table border = '2'><tr align='center'>";

        // 利用 foreach 迴圈印出陣列

        foreach ($items as $value) {

                echo "<td> $value </td>";

        }

        echo "</tr>";

        while($row=mysqli_fetch_row($result)) {

                echo "<tr>";

                for($j=0; $j<mysqli_num_fields($result); $j++) {

                        echo "<td>$row[$j]</td>";

                }

                echo "</tr>";

        }

        echo "</table>";

        mysql_close($db_link);

?>

13-5-4 自我挑戰:學生退選系統

(A) 系統功能:MovCourse

系統需要一個學生退選課程的介面,學生輸入自己學號後,可供選擇他目前所選課程,再用下拉式挑選退選該課程,期望表單網頁如下:(輸入學號)

執行網頁的結果如下:(顯示目前該生所選課程,請點選欲退選之課程)

更新網頁的結果如下:(顯示刪除學號學生的開課代碼)

 (B) SQL 系統分析

選課資料登錄於 select_course 資料表內,必須對它做刪除的動作。圖 13-5 是退選的資料關係圖,我們需要 3 個網頁來完成它,如下:

(1) 表單網頁:提供學生輸入學號的介面,並傳遞 student_ID 訊息給執行網頁。

(2) 執行網頁:利用巢狀查詢方法。子查詢功能是利用收到 student_ID 訊息,由 select_course 資料表查出它選修了哪些課,再使用『in』連結,由 public_course 視界上查詢出那些課程的相關資料,將每筆資料做成下拉式選單,可供學生選擇,選擇欲退選課程後,傳遞它的 open_course_ID 給刪除網頁。另外,也需傳遞 student_ID,但須使用隱藏式(type = “hidden”)傳遞。

(3) 更新網頁:利用收到的 open_course_ID student_ID 訊息,做為指標刪除該選課資料,並顯示執行結果。

13-5 學生退選資料關係圖

(C) 執行網頁的提示:(MovCourse-action-1.php)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

<?php

……

// 查詢學生選讀課程

        $sql_query = "select *

                    from public_course

                    where open_course_ID in (select open_course_ID

                                         from select_course

                                         where student_ID = '$student_ID')";

        $result = mysql_query($select_db, $sql_query);

        if (mysqli_num_rows($result) == 0)

               echo "$student_ID 學生沒有修任何課程 <BR>";

 

//選擇退選課程

        echo "<p> 請點選欲退選課程 </p> <BR>";

        echo "<form name='表單' method='post' action=' PM12_3-action-2.php'>";

        while($row=mysqli_fetch_row($result)) {

                echo "<input type='radio' name='open_course_ID' value='$row[0]'>";

                for($j=1; $j<mysql_num_fields($result); $j++) {

                        echo "$row[$j]---";

                }

                echo "<BR>";

 

        }

// 隱藏傳送學號

        echo "<input name='student_ID' value='$student_ID' type='hidden'>";

        echo "<input type='submit' value='送出表單'>";

        echo "</form>";

        mysql_close($db_link);

?>

 (D) 更新網頁提示:(MovCourse-action-2.php)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

….

// 刪除課程

        $sql_query = "delete from select_course

                      where student_ID = '$student_ID'

                     and open_course_ID = '$open_course_ID'";

        $result = mysqli_query($select_db, $sql_query);

 

//查詢課程刪除否

        $sql_query = "select *

                    from select_course

                    where student_ID = '$student_ID'

                          and open_course_ID = '$open_course_ID'";

        $result = mysqli_query($select_db, $sql_query);

        if (mysqli_num_rows($result) == 0)

               echo "$student_ID $open_course_ID 已刪除 <BR>";

…..

翻轉工作室:粘添壽

 

course_db 關聯圖

資料庫程式設計:

 

 

 

翻轉電子書系列: