1. 程式人生 > 實用技巧 >資料庫專案實訓回顧

資料庫專案實訓回顧

資料庫專案實訓回顧,本次是做教室綜合管理系統,核心功能就是關於借用教室

整個專案已上傳 github 碼雲

流程步驟:

  1. 需求分析
  2. 資料庫設計
  3. 資料庫的釋出實施
  4. 資料庫測試
  5. 資料庫應用開發

一、需求分析

1.	教室綜合管理系統
	1)	根據課表編排每間教室的使用時間
	2)	除了課表佔用的時間外可以使用空閒時間將教室借與學生
	3)	教室需要定期檢修,出現裝置故障後需要暫停使用進行維修
	4)	教室在每學期期末需要進行考試安排
2.	教室在每週的哪些時間需要用來上課,根據教務處的排課結果安排教室使用時間
3.	學生在教室空閒時間可通過提供自己學號來代表班級借用教室
4.	期末兩週時間內,根據教務處的考試安排結果佔用教室使用時間
5.	暫停使用處於需要維修狀態下需要標記出來
6.	期末考試時也需要將教室標記為考試佔用狀態
7.	學生可以根據具體時間查到有哪些空閒教室
8.	學生可以根據教室號查到此教室什麼時候空閒
9.	學生可以根據教室容量(座位數)查詢教室
10.	考試安排需要根據人數具體分配教室
11.	老師也可提供教師號借用教室,借用方式和學生借用類似

二、資料庫設計

使用軟體:PowerDesigner

概念模型 E-R圖:

邏輯模型 :

物理模型:

最後,生成資料庫定義指令碼檔案

三、資料庫的釋出實施

使用軟體:SQLyog

根據上一階段的 .sql資料庫定義指令碼檔案,建立資料庫、表、檢視、觸發器、儲存過程等。並新增一些資料。

CREATE DATABASE 教室綜合管理系統;
USE 教室綜合管理系統;
-- 匯入表結構
-- 插入資料

INSERT INTO 學生 VALUES('S005','陳邊','18080808000');
INSERT INTO 學生 VALUES('S001','劉三','18080808001');
INSERT INTO 學生 VALUES('S002','李聰','18080808002');
INSERT INTO 學生 VALUES('S003','趙海','18080808003');
INSERT INTO 學生 VALUES('S004','王海','18080808004');

INSERT INTO 教師 VALUES('T001','宋曉梅','17021954593');
INSERT INTO 教師 VALUES('T002','羅雲霄','17021954593');
INSERT INTO 教師 VALUES('T003','李四','17022544593');
INSERT INTO 教師 VALUES('T004','王明','17021947593');
INSERT INTO 教師 VALUES('T005','陳歡','17021951293');

INSERT INTO 教室 VALUES('10A303',100);
INSERT INTO 教室 VALUES('10A201',90);
INSERT INTO 教室 VALUES('10A202',100);
INSERT INTO 教室 VALUES('10A203',100);
INSERT INTO 教室 VALUES('10A204',90);
INSERT INTO 教室 VALUES('10A301',100);
INSERT INTO 教室 VALUES('10A302',100);

INSERT INTO 課程 VALUES('C001','網路營銷',90);
INSERT INTO 課程 VALUES('C002','C語言程式設計',120);
INSERT INTO 課程 VALUES('C003','java面向物件程式設計',95);
INSERT INTO 課程 VALUES('C004','C++面向物件程式設計',80);
INSERT INTO 課程 VALUES('C005','編譯原理',123);
INSERT INTO 課程 VALUES('C006','計算機組成原理',90);
INSERT INTO 課程 VALUES('C007','作業系統',92);

INSERT INTO 課程安排 VALUES('C001','10A201',1,17,1,1112);
INSERT INTO 課程安排 VALUES('C002','10A202',1,18,2,910);
INSERT INTO 課程安排 VALUES('C006','10A202',1,18,2,34);
INSERT INTO 課程安排 VALUES('C003','10A201',1,15,3,12);
INSERT INTO 課程安排 VALUES('C004','10A204',1,18,4,34);
INSERT INTO 課程安排 VALUES('C007','10A204',1,18,4,12);
INSERT INTO 課程安排 VALUES('C005','10A301',1,18,5,56);
INSERT INTO 課程安排 VALUES('C007','10A301',1,18,5,12);
INSERT INTO 課程安排 VALUES('C002','10A301',1,18,7,910);

INSERT INTO 教室佔用記錄 VALUES('10A302','S005',NULL,17,1,1112,'開班會');
INSERT INTO 教室佔用記錄 VALUES('10A302','S001',NULL,18,1,910,'宣傳部例會');
INSERT INTO 教室佔用記錄 VALUES('10A201','S002',NULL,5,7,1112,'團日活動');
INSERT INTO 教室佔用記錄 VALUES('10A201','S002',NULL,5,7,910,'自習');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,7,12,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,7,34,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,7,56,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,6,12,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,6,34,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,6,56,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,5,12,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,5,34,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,20,5,56,'考試');
INSERT INTO 教室佔用記錄 VALUES('10A201',NULL,NULL,19,7,12,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A202',NULL,NULL,20,7,34,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A203',NULL,NULL,20,7,56,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A204',NULL,NULL,20,6,12,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A302',NULL,NULL,20,6,34,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A301',NULL,NULL,20,6,56,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A202',NULL,NULL,20,5,12,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A202',NULL,NULL,20,5,34,'維修');
INSERT INTO 教室佔用記錄 VALUES('10A202',NULL,NULL,20,5,56,'維修');

-- 觸發器 -- 教室佔用申請
DELIMITER ;
DELIMITER $$

CREATE TRIGGER lease_ins_chk BEFORE INSERT
  ON 教室佔用記錄
  FOR EACH ROW
BEGIN
-- 檢查是否存在此教室
  IF new.教室號 NOT IN (SELECT 教室號 FROM 教室) THEN
    signal SQLSTATE "HY000"
    SET message_text = "新增失敗,不存在此教室號!";
  END IF;
  
-- 若有學生號,則檢查是否存在此學生號
  IF new.學號 IS NOT NULL AND new.學號 NOT IN (SELECT 學號 FROM 學生 WHERE 學號=new.學號) THEN
    signal SQLSTATE "HY000"
    SET message_text = "新增失敗,不存在此學生號!";
  END IF;
  
-- 若有工號,則檢查是否存在此工號
  IF new.工號 IS NOT NULL AND new.工號 NOT IN (SELECT 工號 FROM 教師 WHERE 工號=new.工號) THEN
    signal SQLSTATE "HY000"
    SET message_text = "新增失敗,不存在此工號!";
  END IF;
  
-- 檢查此教室是否被佔用
  IF new.教室號 IN (SELECT 教室號 FROM 教室佔用記錄 WHERE new.佔用周=佔用周 AND new.佔用星期=佔用星期 AND new.佔用課時=佔用課時
                    UNION SELECT 教室號 FROM 課程安排 WHERE 開始周<=new.佔用周 AND 結束周>=new.佔用周 AND new.佔用星期=星期 AND new.佔用課時=課時)
  THEN
    signal SQLSTATE "HY000"
    SET message_text = "新增失敗,此教室於此時刻被佔用!";
  END IF;
  
END$$

四、資料庫測試

使用軟體:SQLyog

-- 問題測試

-- 王德發同學要借用10A301教室,時間為17周星期5下午78節課,他的學號為S065,電話為15368458821。
INSERT INTO 學生 VALUES('S065','王德發','15368458821');
INSERT INTO 教室佔用記錄 VALUES('10A301','S065',NULL,17,5,78,'無');

-- 查詢所有被考試佔用的教室
SELECT * FROM 教室佔用記錄 WHERE 佔用原因 = '考試';

-- 查詢第19周的有哪些教室在維修。
SELECT 教室號 FROM 教室佔用記錄 WHERE 佔用周=19 AND 佔用原因 = '維修';

-- 查詢課程名為C語言程式設計的課程在哪個教室上課
SELECT 教室號 FROM 課程安排 WHERE 課程號 IN(SELECT 課程號 FROM 課程 WHERE 課程名='C語言程式設計');

-- 網路營銷所在的教室,在第17周時,有哪些時間被佔用
SELECT 佔用星期,佔用課時 FROM 教室佔用記錄 WHERE 佔用周 =17 AND 教室號 IN (SELECT 教室號 FROM 課程安排 WHERE 課程號 =(SELECT 課程號 FROM 課程 WHERE 課程名='網路營銷'))
UNION
SELECT 星期 AS 佔用星期, 課時 AS 佔用課時 FROM 課程安排 WHERE 教室號 IN (SELECT 教室號 FROM 課程安排 WHERE 課程號 =(SELECT 課程號 FROM 課程 WHERE 課程名='網路營銷')) AND 開始周<=17 AND 結束周>=17;

-- 查詢在第5周星期7晚上910節課,容量>90的空閒教室有哪些。
SELECT 教室號 FROM  教室 WHERE   容量 >90 AND 教室號 NOT IN (SELECT 教室號 FROM 教室佔用記錄 WHERE 佔用周 =5 AND 佔用星期 =7 AND 佔用課時=910 )AND 教室號 NOT IN (SELECT 教室號 FROM 課程安排 WHERE 開始周<=5 AND 結束周>=5 AND 星期=7 AND 課時=910);

-- 查詢第17周星期1,3-4節課期間有哪些教室空閒。
SELECT 教室號 FROM  教室 WHERE  教室號 NOT IN (SELECT 教室號 FROM 教室佔用記錄 WHERE 佔用周 =17 AND 佔用星期 =1 AND 佔用課時=34 ) AND 教室號 NOT IN (SELECT 教室號 FROM 課程安排 WHERE 開始周<=17 AND 結束周>=17 AND 星期=1 AND 課時=34);

-- 查詢教室10A204在第17周所有因課程佔用的時間。
SELECT 星期 AS 佔用星期, 課時 AS 佔用課時 FROM 課程安排 WHERE 教室號="10A204" AND 開始周<=17 AND 結束周>=17;

-- 查詢第20周10A201的考試佔用情況。
SELECT 佔用周, 佔用星期, 佔用課時 FROM 教室佔用記錄 WHERE 教室號 = '10A201' AND 佔用原因 = '考試';

-- 謝特老師要借用10A301教室,時間為15周星期4下午56節課,他的工號為T006,電話為16868593521。
INSERT INTO 教師 VALUES('T006','謝特','16868593521');
INSERT INTO 教室佔用記錄 VALUES('10A301',NULL,'T006',15,4,56,'無');


-- 觸發器測試

INSERT INTO 教室佔用記錄
VALUES("10A201", NULL, NULL, 1, 7, 1112, "自習");

INSERT INTO 教室佔用記錄
VALUES("10A201", "S001", "T001", 1, 6, 1112, "補習");

INSERT INTO 教室佔用記錄
VALUES("10A201", "S666", NULL, 1, 7, 1112, "自習");

INSERT INTO 教室佔用記錄
VALUES("10A201", NULL, "T666", 1, 7, 1112, "自習");

INSERT INTO 教室佔用記錄
VALUES("10A201", NULL, NULL, 1, 7, 1112, "自習");

INSERT INTO 教室佔用記錄
VALUES("10A201", NULL, NULL, 17, 1, 1112, "自習");

效果截圖:

五、資料庫應用開發

使用軟體:VS2019 C#

1.查詢所有教室借用記錄

2.查詢某時間某容量哪些有空閒的教室

3.申請借用教室

程式碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using MySql.Data.MySqlClient;

namespace 教室綜合管理系統
{
    class Program
    {
        static void Main(string[] args)
        {
            //showLease();
            //showNotLeaseRoom();
            borrowClass();
        }

        // 查詢所有教室借用記錄
        static void showLease()
        {
            // 連線資料庫
            string conStr = "server=localhost;user=root;database=教室綜合管理系統;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;

            cmd.CommandText = "SELECT * FROM 教室佔用記錄;";
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            int n = adapter.Fill(ds);

            if(ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i< ds.Tables[0].Rows.Count; i++)
                {
                    System.Console.WriteLine("教室號: {0}", ds.Tables[0].Rows[i]["教室號"]);
                    System.Console.WriteLine("學號: {0}", ds.Tables[0].Rows[i]["學號"]);
                    System.Console.WriteLine("工號: {0}", ds.Tables[0].Rows[i]["工號"]);
                    System.Console.WriteLine("佔用周: {0}", ds.Tables[0].Rows[i]["佔用周"]);
                    System.Console.WriteLine("佔用星期: {0}", ds.Tables[0].Rows[i]["佔用星期"]);
                    System.Console.WriteLine("佔用課時: {0}", ds.Tables[0].Rows[i]["佔用課時"]);
                    System.Console.WriteLine("佔用原因: {0}", ds.Tables[0].Rows[i]["佔用原因"]);
                    System.Console.WriteLine("\n");
                }
                System.Console.WriteLine("總共有 " + n + " 條教室借用記錄:");
                System.Console.WriteLine("\n");
            }
            else
            {
                System.Console.WriteLine("目前還沒有教室借用記錄!");
            }
            con.Close();
        }

        // 查詢某時間某容量哪些有空閒的教室
        static void showNotLeaseRoom()
        {
            int lease_week = 0, lease_day = 0, lease_course_time = 0, seats = 0;
            string temp = "";
            // 連線資料庫
            string conStr = "server=localhost;user=root;database=教室綜合管理系統;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;

            // 查詢時間
            Console.WriteLine("查詢多少周:");
            temp = Console.ReadLine();
            if(temp == "")
                lease_week = 0;
            else
                lease_week = Convert.ToInt32(temp);
            while (lease_week < 1 || lease_week > 20)
            {
                Console.WriteLine("週數輸入錯誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    lease_week = 0;
                else
                    lease_week = Convert.ToInt32(temp);
            }

            Console.WriteLine("查詢星期幾:");
            temp = Console.ReadLine();
            if (temp == "")
                lease_day = 0;
            else
                lease_day = Convert.ToInt32(temp);
            while (lease_day < 1 || lease_day > 7)
            {
                Console.WriteLine("星期輸入錯誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    lease_day = 0;
                else
                    lease_day = Convert.ToInt32(temp);
            }

            Console.WriteLine("查詢多少課時:");
            temp = Console.ReadLine();
            if (temp == "")
                lease_course_time = 0;
            else
                lease_course_time = Convert.ToInt32(temp);
            while (lease_course_time != 12 && lease_course_time != 34 && lease_course_time != 56 && lease_course_time != 78 && lease_course_time != 910 && lease_course_time != 1112)
            {
                Console.WriteLine("課時輸入錯誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    lease_course_time = 0;
                else
                    lease_course_time = Convert.ToInt32(temp);
            }

            Console.WriteLine("查詢多少容量(可選填):");
            temp = Console.ReadLine();
            if (temp == "")
                seats = 0;
            else
                seats = Convert.ToInt32(temp);
            while (seats < 0)
            {
                Console.WriteLine("容量有誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    seats = 0;
                else
                    seats = Convert.ToInt32(temp);
            }

            cmd.CommandText = "SELECT 教室號 FROM  教室 WHERE 容量>@seats AND 教室號 NOT IN (SELECT 教室號 FROM 教室佔用記錄 WHERE 佔用周=@lease_week AND 佔用星期=@lease_day AND 佔用課時=@lease_course_time) AND 教室號 NOT IN (SELECT 教室號 FROM 課程安排 WHERE 開始周<=@lease_week AND 結束周>=@lease_week AND 星期=@lease_day AND 課時=@lease_course_time);";
            cmd.Parameters.AddWithValue("@seats", seats);
            cmd.Parameters.AddWithValue("@lease_week", lease_week);
            cmd.Parameters.AddWithValue("@lease_day", lease_day);
            cmd.Parameters.AddWithValue("@lease_course_time", lease_course_time);

            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                System.Console.WriteLine("找到在第" + lease_week + "周 星期" + lease_day + " " + lease_course_time + "節課時 並且容量大於"+seats+" 的空閒教室了:");
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    System.Console.WriteLine("教室號: {0}", ds.Tables[0].Rows[i]["教室號"]);
                }
                System.Console.WriteLine("\n");
            }
            else
            {
                System.Console.WriteLine("第"+lease_week+"周 星期"+ lease_day+" "+lease_course_time+"課時,沒有空閒教室!");
                System.Console.WriteLine("\n");
            }

            con.Close();
        }

        // 申請借用教室
        static void borrowClass() {
            // 連線資料庫
            string conStr = "server=localhost;user=root;database=教室綜合管理系統;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();

            // 宣告變數
            string classroom_id = "", student_id = "", teacher_id = "", lease_reason = "", temp = "";
            int lease_week = 0, lease_day = 0, lease_course_time = 0;

            // 申請佔用教室
            Console.WriteLine("申請佔用教室:");
            classroom_id = Console.ReadLine();

            MySqlCommand cmd1 = new MySqlCommand();
            cmd1.Connection = con;
            cmd1.CommandType = System.Data.CommandType.Text;
            // 獲取已有的教室號
            cmd1.CommandText = "select 教室號 from 教室";
            MySqlDataAdapter adapter1 = new MySqlDataAdapter(cmd1);
            DataSet ds1 = new DataSet();
            adapter1.Fill(ds1);
            // 是否存在教室號
            for (int i = 0; i < ds1.Tables[0].Rows.Count; i++)
            {
                if (classroom_id == (string)ds1.Tables[0].Rows[i]["教室號"])
                    break;
                else if (i + 1 == ds1.Tables[0].Rows.Count)
                {
                    Console.WriteLine("無此教室,請重新輸入:");
                    classroom_id = Console.ReadLine();
                    i = -1;
                }
            }

            // 申請者學號
            Console.WriteLine("申請者學號(可選填):");
            student_id = Console.ReadLine();

            if(student_id != "") { 
                MySqlCommand cmd2 = new MySqlCommand();
                cmd2.Connection = con;
                cmd2.CommandType = System.Data.CommandType.Text;
                // 先獲取已有的學生的學號
                cmd2.CommandText = "select 學號 from 學生";
                MySqlDataAdapter adapter2 = new MySqlDataAdapter(cmd2);
                DataSet ds2 = new DataSet();
                adapter2.Fill(ds2);
                // 是否存在學生
                for (int i = 0; i < ds2.Tables[0].Rows.Count; i++)
                {
                    if (student_id == (string)ds2.Tables[0].Rows[i]["學號"])
                        break;
                    else if (i + 1 == ds2.Tables[0].Rows.Count)
                    {
                        Console.WriteLine("無此學生號,請重新輸入:");
                        student_id = Console.ReadLine();
                        i = -1;
                    }
                }
            }

            // 申請者工號
            Console.WriteLine("申請者工號(可選填):");
            teacher_id = Console.ReadLine();
            if(teacher_id != "") {
                MySqlCommand cmd3 = new MySqlCommand();
                cmd3.Connection = con;
                cmd3.CommandType = System.Data.CommandType.Text;
                // 先獲取已有的工號
                cmd3.CommandText = "select 工號 from 教師";
                MySqlDataAdapter adapter3 = new MySqlDataAdapter(cmd3);
                DataSet ds3 = new DataSet();
                adapter3.Fill(ds3);
                // 是否存在此工號
                for (int i = 0; i < ds3.Tables[0].Rows.Count; i++)
                {
                    if (teacher_id == (string)ds3.Tables[0].Rows[i]["工號"])
                        break;
                    else if (i + 1 == ds3.Tables[0].Rows.Count)
                    {
                        Console.WriteLine("無此工號,請重新輸入:");
                        teacher_id = Console.ReadLine();
                        i = -1;
                    }
                }
            }

            // 申請時間
            Console.WriteLine("申請多少周:");
            temp = Console.ReadLine();
            if (temp == "")
                lease_week = 0;
            else
                lease_week = Convert.ToInt32(temp);
            while (lease_week < 1 || lease_week > 20)
            {
                Console.WriteLine("週數輸入錯誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    lease_week = 0;
                else
                    lease_week = Convert.ToInt32(temp);
            }

            Console.WriteLine("申請星期幾:");
            temp = Console.ReadLine();
            if (temp == "")
                lease_day = 0;
            else
                lease_day = Convert.ToInt32(temp);
            while (lease_day < 1 || lease_day > 7)
            {
                Console.WriteLine("星期輸入錯誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    lease_day = 0;
                else
                    lease_day = Convert.ToInt32(temp);
            }

            Console.WriteLine("申請多少課時:");
            temp = Console.ReadLine();
            if (temp == "")
                lease_course_time = 0;
            else
                lease_course_time = Convert.ToInt32(temp);
            while (lease_course_time != 12 && lease_course_time != 34 && lease_course_time != 56 && lease_course_time != 78 && lease_course_time != 910 && lease_course_time != 1112)
            {
                Console.WriteLine("課時輸入錯誤,請重新輸入:");
                temp = Console.ReadLine();
                if (temp == "")
                    lease_course_time = 0;
                else
                    lease_course_time = Convert.ToInt32(temp);
            }

            // 教室是否被佔用
            int f = 0;
            do
            {
                if (f != 0)
                {
                    Console.WriteLine("此教室於此時被佔用,請重新輸入時間\n");
                    Console.WriteLine("申請多少周:");
                    lease_week = Convert.ToInt32(Console.ReadLine());
                    while (lease_week < 1 && lease_week > 20)
                    {
                        Console.WriteLine("週數輸入錯誤,請重新輸入:");
                        lease_week = Convert.ToInt32(Console.ReadLine());
                    }
                    Console.WriteLine("申請星期幾:");
                    lease_day = Convert.ToInt32(Console.ReadLine());
                    while (lease_day < 1 && lease_day > 7)
                    {
                        Console.WriteLine("星期輸入錯誤,請重新輸入:");
                        lease_day = Convert.ToInt32(Console.ReadLine());
                    }
                    Console.WriteLine("申請多少課時:");
                    lease_course_time = Convert.ToInt32(Console.ReadLine());
                    while (lease_course_time != 12 && lease_course_time != 34 && lease_course_time != 56 && lease_course_time != 78 && lease_course_time != 910 && lease_course_time != 1112)
                    {
                        Console.WriteLine("課時輸入錯誤,請重新輸入:");
                        lease_course_time = Convert.ToInt32(Console.ReadLine());
                    }
                }
                MySqlCommand cmd4 = new MySqlCommand();
                cmd4.Connection = con;
                cmd4.CommandType = System.Data.CommandType.Text;

                cmd4.CommandText = "SELECT 教室號 FROM 教室佔用記錄 WHERE @classroom_id=教室號 AND @lease_week=佔用周 AND @lease_day=佔用星期 AND @lease_course_time=佔用課時 UNION SELECT 教室號 FROM 課程安排 WHERE @classroom_id=教室號 AND 開始周<=@lease_week AND 結束周>=@lease_week AND @lease_day=星期 AND @lease_course_time=課時";
                cmd4.Parameters.AddWithValue("@classroom_id", classroom_id);
                cmd4.Parameters.AddWithValue("@lease_week", lease_week);
                cmd4.Parameters.AddWithValue("@lease_day", lease_day);
                cmd4.Parameters.AddWithValue("@lease_course_time", lease_course_time);

                MySqlDataAdapter adapter4 = new MySqlDataAdapter(cmd4);
                DataSet ds4 = new DataSet();
                f = adapter4.Fill(ds4);
            } while (f>0);


            // 申請原因
            Console.WriteLine("申請原因(可選填):");
            temp = Console.ReadLine();
            if (temp == "")
                lease_reason = "無";
            else
                lease_reason = temp;
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;

            cmd.CommandText = "insert into 教室佔用記錄 values(@classroom_id,@student_id,@teacher_id,@lease_week,@lease_day,@lease_course_time,@lease_reason);";
            cmd.Parameters.AddWithValue("@classroom_id", classroom_id);
            if (student_id == "")
                cmd.Parameters.AddWithValue("@student_id", null);
            else
                cmd.Parameters.AddWithValue("@student_id", student_id);
            if(teacher_id == "")
                cmd.Parameters.AddWithValue("@teacher_id", null);
            else
                cmd.Parameters.AddWithValue("@teacher_id", teacher_id);
            cmd.Parameters.AddWithValue("@lease_week", lease_week);
            cmd.Parameters.AddWithValue("@lease_day", lease_day);
            cmd.Parameters.AddWithValue("@lease_course_time", lease_course_time);
            cmd.Parameters.AddWithValue("@lease_reason", lease_reason);


            int r = cmd.ExecuteNonQuery();
            //MySql.Data.MySqlClient.MySqlException
            if (r == 1)
            {
                System.Console.WriteLine("\n申請成功!");
                System.Console.WriteLine("\n");
            }
            else
            {
                System.Console.WriteLine("\n申請失敗!");
                System.Console.WriteLine("\n");
            }

            con.Close();
        }
    }
}