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

 

13-4 教師成績管理系統

內容:

  • (A) 系統功能

  • (B) SQL 系統分析

  • (C) 網頁製作技巧

  • (D) 查詢網頁程式範例

  • (E) 執行網頁程式範例

  • (F) 更新網頁程式範例

(A) 系統功能: mExam

系統需要一套成績登錄系統,教師選擇課程之後,可在網頁上登錄平時、期中考、期末考或學期成績,期望查詢網頁如下:

執行網頁的結果如下:

更新網頁的結果如下:

 (B) SQL 系統分析

13-1 為成績登錄的資料關係圖,吾人需由 teachersall_course classes 表查出 teacher_IDcourse_ID class_ID,再查出 open_course_ID,再由 open_course 查詢出相關資料。

13_1 成績管理的資料關係圖

(C) 網頁製作技巧

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

我們需要 3 個網頁來完成,如下:

(1) 查詢網頁(mExam-form.php)開啟 simple_teachersclasses all_course 3 個資料表,提供選單方式,讓老師選擇教師(teacher_ID)、開課課程(course_ID) 與開課班級(class_ID),並傳遞這 3 個訊息給執行網頁。

(2) 執行網頁(mExam-action-1.php)利用收到的 teacher_IDcourse_ID class_ID open_course 資料表內查詢此課程的 open_course_ID,如果沒有的話,則顯示沒有此課程。有開此課程,則由 select_course 資料表查詢出有哪些學生修讀該課程,並建立選單讓教師修改或登錄成績。教師登錄完畢後將所有資料傳送給更新網頁。

(3) 更新網頁(mExam-action-2.php)將所有收到的訊息寫入 select_course 資料表內,再輸出其結果。

(D) 查詢網頁的程式範例:mExam-form.php

1

2

3

 

13-3-3 範例研討:教師開課( openCourse-form.php) 雷同,不再敘述

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

此網頁功能是由接收到的 3 個訊息,查出所開課程的代碼,再由 select_course 資料表中查詢出有哪些同學修課。出現一個問題,我們無法預定到底有多少位學生修課,修改完後建立訊息需傳遞到下一個更新網頁上。圖 13_2 是修改與傳遞訊息的畫面,基本上,每一筆記錄6 個欄位數是不會變更的,可以編號 0 ~5。但資料的筆數是會變更的,我們用一個 $M 變數來記錄多少比數,對每一筆資料的某一欄位編碼是 value_.$M._$j,其中 $M 表示第幾筆記錄,$j 是第幾個欄位(0 ~5)。另外,student_ID($j = 0) open_course_ID($j=1) 內容是不允許變更的,我們將它們設定成隱藏式(type=’hidden’)。每一個欄位傳送訊息名稱皆設定成 name = ‘$value’,其中 $value = value_.$M_$j。最後傳遞 $M 給更新網頁,讓它知道有多少筆資料。

13_2 傳送修改訊息的編碼

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

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

<?php

        $teacher_ID = $_POST["teacher_ID"];

        $course_ID = $_POST["course_ID"];   

        $class_ID = $_POST["class_ID"];

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

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

        // 查詢該課程的 open_course_ID

    $sql_query = "select open_course_ID

                      from open_course

                                  where teacher_ID = '$teacher_ID'

                                  and class_ID = '$class_ID'

                                  and course_ID = '$course_ID'";

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

        if(!$result) {

                echo "沒有此開課課程,請重新輸入 !! <BR>";

                exit();

        }

        $row=mysqli_fetch_row($result);

        $open_course_ID = $row[0];

        // 查詢選課學生

        $sql_query = "select *

                                  from select_course

                                  where open_course_ID = $open_course_ID";

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

        //echo "登錄學生成績 <BR>";

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

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

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

        // 利用 foreach 迴圈印出欄位名稱

        foreach ($items as $value) {

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

        }

        echo "</tr>";

        $M=0;

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

                echo "<tr>";

                $value = value_.$M._0;

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

                $value = value_.$M._1;

                echo "<input name='$value' value='$row[1]' type='hidden'>";

                echo "<td>$row[0]</td><td>$row[1]</td>";

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

                        $value = value_.$M._.$j;

                        echo "<td><input name='$value' type='text' value='$row[$j]'></td>";

                }

                echo "</tr>";

                echo "<BR>";

                $M=$M + 1;

        }

// sent value is value_0_2 ~ value_(M-1)_5

        echo "<input name='number' value='$M' type='hidden'>";// 資料筆數

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

    echo "</form>";

        echo "</table>";

        mysql_close($db_link);

?>

(F) 更新網頁的程式範例:mExam-action-2.php

首先由執行網頁處收到資料的筆數($number)後,就知道應該接收到多少訊息,訊息是 value_.$M._$j$M = 0, 1, …, $number$j = 0, 1, …, 5。將這些資料填入 data[$M][$j] 陣列內。再依序填入 select_course 資料表內,但 where 條件是 student_ID = $student_ID open_course_ID = $open_course_ID

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

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

<?php

        echo " 成績輸入後資料 <BR>";

// 接收資料

        $number = $_POST["number"];

        for ($M=0; $M<$number; $M++) {

            for($j=0; $j<6; $j++) {

                        $value = value_.$M._.$j;

            $data[$M][$j] = $_POST["$value"];

        }

        echo "<BR>";

    }

// 連結資料庫

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

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

// 寫入修改後資料

        for ($M=0; $M<$number; $M++) {

           $student_ID = $data[$M][0];

            $open_course_ID = $data[$M][1];

            $normal = $data[$M][2];

            $midTerm = $data[$M][3];

            $finalTerm = $data[$M][4];

            $final = $data[$M][5];

        $sql_query = "update select_course

                      set normal='$normal', midTerm='$midTerm',

                          finalTerm='$finalTerm', final='$final'

                      where student_ID = '$student_ID'

                      and open_course_ID = '$open_course_ID'";

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

        }

//列印欄位名稱與表格

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

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

        // 利用 foreach 迴圈印出欄位名稱

        foreach ($items as $value) {

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

        }

        echo "</tr>";

//列印各筆更新後資料 

        for ($M=0; $M<$number; $M++) {

           $student_ID = $data[$M][0];

            $open_course_ID = $data[$M][1];

        $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);

            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 "<BR>";

        }

        echo "</table>";

        mysql_close($db_link);

?>

 

 

主講人:粘添壽博士

course_db 關聯圖

 

資料庫程式設計 - PHP+MySQL: