資料庫系統理論(三)

重要觀念

1.資料庫(DB):是由一群相關資料的集合體。
2.資料庫管理系統(DBMS):管理這些資料庫檔案的軟體(如:Access)。
3.資料庫系統(DBS)=資料庫(DB)+資料庫管理系統(DBMS)。

資料庫管理系統的功能

1.資料的定義(Data Define)
2.資料的操作(Data Manipulation)
3.重複性的控制(Redundancy Control)
4.表示資料之間的複雜關係(Multi-Relationship)
5.實施完整性限制(Integrity Constraint)
6.提供「備份」與「回復」的能力(Backup and Restore)
一、資料的定義(Data Define)
是指提供DBA建立「欄位名稱」、「資料類型」、及相關的「限制條件」。
二、資料的操作(Data Manipulation)
是指提供使用者方便的存取資料。因此,它提供了四個功能,分別為:
1.新增(INSERT)
2.修改(UPDATE)
3.刪除(DELETE)
4.查詢(SELECT)
三、重複性的控制(Redundancy Control)
主要是為了達成「資料的一致性」及「節省儲存空間」。
四、表示資料之間的複雜關係(Multi-Relationship)
是指DBMS必須要有能力來表示資料之間的複雜關係,基本上,有三種不同的關係,分別為:
1.一對一
2.一對多
3.多對多
五、實施完整性限制(Integrity Constraint)
是指用來規範關聯表中的資料在經過新增、修改即刪除之後,將錯誤或不合法的資料值存入「資料庫」中。
六、提供「備份」與「回復」的能力(Backup and Restore)
是指讓使用者能方便的「備份」或轉移資料庫內的資料,以防在系統毀損時,還能將資料「還原」回去,減少損失。

資料庫系統理論(二)

結構化程式設計

定義:是指將一個「大系統」分解成許多具有「獨立功能」的「小模組」。

優點:
1.程式容易閱讀。
2.減少程式維護的成本。
3.減少程式邏輯的錯誤。
4.提高程式的生產力。
5.降低程式的複雜性及測試時間。
缺點:
1.程式比較多,故比較佔記憶體空間。
2.程式比較多,固執行速度比較慢。

結構化程式必須遵守的原則

1.每一個結構只能有一個入口及出口。
2.少用goto的指令
3.採用「由上而下」的觀念設計程式。

前測試迴圈

定義:先判斷條件式,再執行迴圈。
作法:「執行前」先檢查是否符合條件式,若符合,則執行迴圈;若不符合,則跳出迴圈。
語法:
while (條件式)
{
敘述區塊;
}
實例:
想到公園跑步。
假設我們想到公園跑步,則在我們出門時,一定會先判斷「是否有颳風下雨」,如果是的話,就會「待在家中....」繼續等待,直到沒有颳風下雨為止。


後測試迴圈

定義:先執行迴圈,再判斷條件式
作法:「判斷前」會先執行一次之後,再執行條件式判斷,不符合則跳出迴圈,但至少會執行一次迴圈。
語法:
do
{
敘述區塊;
}
while (條件式);
實例:
假設我們已經在公園跑步了一段時間,如果「沒有遇到颳風下雨」,則繼續「跑步....」。直到「颳風下雨」才停止跑步。

break語法的迴圈情況


contine語法的迴圈情況

資料庫系統理論(一)

Chapter2 資料型態與變數宣告及運算

 變數
*整數型態
十六進位制,以0x開頭
*布林型態
條件成立會顯示(1),條件不成立會顯示(空字串)
注意~在PHP程式語言中,(=)的真正意義是(指定運算子),並非數學中的(等於)。
*變數命名原則
$i_int 變數宣告整數
$f_float 變數宣告整浮點型態
$s_string 變數宣告為字串型態
$b_bool 變數宣告為布林型態

*字串常數
常數的優點
1.減少程式錯誤的機會。
2.讓程式更易於閱讀。
3.使程式較容易修正。

*運算子的分類
1.指定運算子 (例如 = )
2.算術運算子 (例如 +、-、*、/ )
3.關係運算子 (又稱比較運算子 例如 >、<、= ...)
4.邏輯運算子 (例如 AND、OR、NOT ...)
撰寫程式時,若遇到數學上的符號 = 時,都會有疑問,那就是:何時才是真正的等號;何時才能當作指定運算子來使用。基本上,在PHP中等的等號(=)大部分都是(指定運算子)來使用

關係運算子
運算子功能條件式執行結果
== (等於)判斷A與B是否相等$A=$BFlase
!=或 <>(不等於)判斷A是否不等於B$A!=$BTrue
< (小於)判斷A是否小於B$A<$BTrue
<=(小於等於)判斷A是否小於等於B$A<=$BTrue
>(大於)判斷A是否大於B$A>$B Flase
>=(大於等於)判斷A是否大於等於B$A>=$BFlase

邏輯運算子
運算子順序意義運算式運算結果為True的條件
!(邏輯 Not)1Not AA必為假
&&(邏輯 And)2A  and BA、B必須為真
||(邏輯 Or)3A Or B A、B中至少一個為真

複合指定運算式
運算子功能簡化的表示法相當於執行結果
(設I的初始值為3)
指定符號$I=2;$I=2;$I=2;
+=相加後再指定給變數$I+=2;$I=$I+2;$I=5;
-=相減後再指定給變數$I-=2;$I=$I-2;$I=1;
*=相乘後再指定給變數$I*=2;$I=$I*2;$I=6;
/=相除後再指定給變數$I/=2;$I=$I/2;$I=1.5;

後面有個小孩抱著嗎?

PHP陣列

程式裡常常會出現陣列,不管是一維、二維、多維陣列,每每遇到陣列,我總是搞不清楚什麼是index,key,value。目前稍微懂一點,做一下筆記吧!

範例

$week=array(
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');

我們可以利用索引值來取得值,$week[0]值就是Monday。

0就是索引(index)    Monday就是值(value)

while迴圈去取值

while (list ($key,$value) = each ($week)){
   print $value;
   //印出Monday Tuesday Wednesday Thursday Friday Saturday Sunday
}

for 迴圈去取值

for ($i = 0 ; $i < count($week); $i++){
   print $week[$i];
   //印出Monday Tuesday Wednesday Thursday Friday Saturday Sunday
}

foreach陣列迴圈去取值

格式
foreach($陣列名稱 as $陣列元素變數)
{
echo $陣列元素變數;
}
foreach ($week as $key => $value){
   print $value;
}
   //印出Monday Tuesday Wednesday Thursday Friday Saturday Sunda
<?php
$array0 = array($row0= array(1,2),
$row1=array(3,4),
$row2=array(5,6));
$array1 = array($row3=array(7,8),
$row4=array(9,10),
$row5=array(11,12));
$array2 = array($row6=array(13,14),
$row7=array(15,16),
$row8=array(17,18));
$cubical = array($array0, $array1, $array2);

foreach ($cubical as $array)
{
foreach ($array as $row)
{
foreach ($row as $element)
{
echo $element."\t";
}
echo "|\t";
}
echo "<br>";
}
?>

印出

結合陣列

格式
$變數名稱["指定名稱"] = 陣列元素的值;

範例
<?php
$array["number1"] = 1;
$array["number2"] = 2;
$array[] = 3;
foreach ($array as $element)
{
echo $element."<br>";
}
?>

陣列相關函數

函數名稱說明
print_r($array)輸出陣列中每個元素索引或鍵值與元素內的值。
array_keys($array)回傳陣列中所有的索引或鍵值。
array_values($array)回傳陣列中所有元素的值。
current($array)回傳目前指標所在陣列元素的值。
key($array)回傳目前指標所在陣列元素的索引或鍵值。
each($array)回傳目前陣列元素的索引或鍵值和元素內的值,並移動自下一個元素。
reset($array)陣列指標回到第一個陣列元素。
end($array)陣列指標指到最後一個陣列元素。
next($array)陣列指標指向下一個陣列元素。
prev($array)陣列指標指向前一個陣列元素。
<?php
$array["a"] = 1; //新增結合陣列元素
$array[] = 2; //新增陣列元素
$array["b"] = 3; //新增結合陣列元素
$arrat[] = 4; //新增陣列元素

echo "1.\t";
print_r($array); //輸入陣列中每個元素索引或鍵值與元素的值
echo "<br>2.\t";
print_r(array_keys($array)); //輸出陣列中所有的索引或鍵值
echo "<br>3.\t";
print_rarray_values($array)); //輸出陣列中所有元素的值
echo "<br>4.\t";
echo current($array); //回傳目前指標所在陣列元素的值
echo "<br>5.\t";
echo key($array); //回傳目前指標所在元素的索引或鍵值
echo "<br>6.\t";
print_r(each($array)); //回傳目前的陣列元素的索引或鍵值和元素內
//的值,並移動自下一個元素
echo "<br>7.\t";
echo reset($array); //陣列指標回到第一個元素
echo "<br>8.\t";
echo end($array); //陣列指標回到最後一個元素
echo "<br>9.\t";
echo prev($array); //陣列指標指向前一個元素
echo "<br>10.\t";
echo next($array); //陣列指標指向下一個元素

陣列元素排序

函數使用格式說明
sort(陣列變數名稱)陣列元素的值從小到大排序。
rsort(陣列變數名稱)陣列元素的值從大到小排序。
asort(陣列變數名稱)結合陣列元素的值由小到大排序。
arsort(陣列變數名稱)結合陣列元素的值由大到小排序。
ksort(陣列變數名稱)結合陣列索引或鍵值由小到大排序。
krsort(陣列變數名稱)結合陣列索引或鍵值由大到小排序。
sort/rsort與asort/arsort 的差別,在於sort/rsort排序時,元素的索引或鍵值並不會留下來,並從0開始重新排序,而asort/arsort則會保留對應的索引或鍵值。

陣列元素搜尋

函數使用格式說明
in_array(數值,陣列變數名稱)檢查值是否在陣列元素中,傳回布林值。
array_search(數值,陣列變數名稱)檢查數值是否在陣列中,如果是,傳回鍵值,若沒有則傳回false。

範例

Garmin Wallent

買Garmin 265,除了要它的跑步、GPS功能之外,也想要它悠遊卡的功能。可是沒常常用,到了要感應時,都會手忙腳亂的,感應失敗。趁著這次搭火車去嘉義,運作的很順利,趕快把步驟記錄起來。


步驟一:常按啟動鈕,讓它出現選單。

步驟二:按start鈕後,出現悠遊卡的樣子。

步驟三:出現感應的符號,才來靠近感應機器。

又完成一個賽事

這次的中小學田徑賽實在是驚險,先是主辦學校換人、賽程表匯入有問題、領隊會議更換組別有問題、比賽紀錄出現問題。還好一項一項解決,把這些困難都當成是一次,可以加深對網站程式認識的機會,這樣就會慢慢釋懷了。

想辦法努力模仿學習

需要改進的地方

  1. 賽程表匯入有問題     
    • 改成匯入後,檢查play_group_id,play_item_id,ol_id是否為空值,將錯誤存成一個txt檔。
    • done!
  2. 更改組別編賽道有問題
    • 目前想法,寫一個可以手動單一換編組賽道的程式。
  3. 400公尺400跨欄成績格式有問題
    • 改play_item的game_unit的值
    • 400M的play_item_id是13,400跨欄的play_item_id是19。把它們的game_unit改成6;另外記得改紀錄的成績格式,不然大家都破紀錄。
    • done!
  4. 選手編號碼有問題
    • 編號碼布時要再check。
    • done!
  5. 網站新聞排序改成DESC
    • index.php的排序增加DESC的排序。
    • done!

PHP 把資料寫入txt檔

把資料寫入txt檔有點複雜,學問有點大,而且發現換行的符號在不同系統是不一樣的,因此紀錄一下。

函式

file_exits()

檔案是否存在 傳回值1,0

file_open() 打開檔案

參數
“r” 開啟為可讀取,檔案指標位於檔案開頭
“r+” 開啟為可讀寫,檔案指標位於檔案開頭
“w” 開啟為可寫入,檔案指標位於檔案開頭。若檔案已存在,則刪除其內容,若不存在則建立該檔案。
“w+” 開啟為可讀寫,檔案指標位於檔案開頭。若檔案已存在,則刪除其內容,若不存在則建立該檔案。
“a” 開啟為可寫入,檔案指標位於檔案結尾。若檔案不存在,則建立。
“a+” 開啟為可讀寫,檔案指標位於檔案結尾。若檔案不存在,則建立。

fclose() 檔案關閉

Windows 系統換行符號是:  \r\n

Mac 系統換行符號是:  \r

Linux 系統換行符號是: \n

搭個便車吧!