iT邦幫忙

0

請問資料庫製作選課系統,怎麼將必修課自動加入、設定限制條件

小弟正在做資料庫的期中專題,要製作選課系統,因為要求3-tier,所以使用XAMPP的PHPmyAdmin。

我在同個資料庫中新增了學生資料(屬性包含學號、班級)、學生選課資料表(屬性包含學號、班級、課程代碼、課程名稱、學分數、必選修、已選學分數)、課程代號時段(屬性包含選課代號、星期、節)、課程資料(屬性包含開課班級、課程名稱、選課代號、學分數、必選修、開課單位、開課人數、已收授人數、授課教師)。

基本要求:
同學可以加選課程,課程加選須滿足以下限制:
(i) 人數已滿的課程不可加選;
(ii) 不可加選衝堂的課程;
(iii) 不可加選與已選課程同名的課程(EX已選資訊二丙的資料庫系統,不能再選資訊二乙的資料庫系統);
(iv) 加選後學分不可超過最高學分限制 (30 學分);
同學可以退選課程,課程退選須滿足下列限制:
(i) 退選後學分不可低於最低學分限制 (9 學分);
(ii) 退選課程若為必修課,系統須提出警告;

現在卡住的問題有:
1.學生選課資料表(目前裡面都沒資料)這個資料表的資料我要透過系統自動看學生哪個班級(學生資料中每個學生都有班級,課程資料中每門課都有開課班級,並標註必選修),就把那個班級的必修課自動加入這個學生的選課資料,要用程式控制嗎?還是資料庫內就能設定了(聽說可以但我不會)
2.判斷是否衝堂,要跟課程代號時段中的課程代碼作連結,想請問資料庫中能不能直接設定做判斷
3.人數已滿的課程不可加選,這個人數在課程資料中有已收授人數,是否也能從資料庫中判斷呢

由於我使用資料庫的經驗相當不足,所以跪求會的人救救我

看更多先前的討論...收起先前的討論...
dragonH iT邦超人 6 級 ‧ 2020-05-14 17:33:21 檢舉
database 你沒教他做

基本上他不會

把想法轉成 code 也是很重要的技能

例如第三題

假設上限 60 人

那加選時就去看這堂課的已選人數是多少

是不是超過上限的 60 人

方法很多
wrxue iT邦新手 4 級 ‧ 2020-05-14 19:18:49 檢舉
應該先畫個ERD出來討論吧
froce iT邦大師 1 級 ‧ 2020-05-14 20:55:52 檢舉
不會就去學,出社會有人教你?
https://www.w3schools.com/sql/
kai881216 iT邦新手 5 級 ‧ 2020-05-14 21:33:28 檢舉
好,我努力試試
3-tier 用 PHPMYADMIN 來解釋,天啊,有沒有念過書啊
基本上 3-tier 要用戶端 伺服端 資料端都要分開,
如果是 WEB 的話,妳後端的 PHP 頁面 要跟 資料庫放在不同的機器內,真的建議多念點書,不然就轉行當記者就好
給你一個教科書範本
http://www.ceci.org.tw/book/52/ch52_2.htm
1. PHP + MYSQL 建議去找幾本書來看,既然是學生,圖書館每天都要去走走,除了泡泡書海,也能順便泡妹子
2. 一般除非資料庫很熟,會寫資料庫程序,否則不建議你剛開始設計網站就直接這麼做,建議還是從資料表規劃,關聯圖,拆表,正規化,UI / UX ,表單,報表,CSS,JS,JQUERY,這些都要熟,你的網站才能做出來
3.如果是學校的專題,CSS可以不需要太怎麼處理,只要熟基本的HTML 來處理查詢出來的資料庫資料就好,既然已經規定要3-tier了,你是不是也要學一下VM環境建構,不然你怎麼把 PHP 跟 MYSQL放在兩台不同的機器咧,當初上課的時候,我們的要求就是這樣,放同一台,分數直接扣50,你後面寫得再好還是要來暑修
當然啦,你們的標準也許跟我們不同,不過該學的要學會,別偷懶
還有星空大是很熱心的邦民,建議你翻一下他的紀錄再來批判他
你問的問題連程式碼都沒有,只是文字敘述,任何人都會誤會你是來問程式碼的,你要開發一個系統,有了使用需求,你就在去溝雞流程圖,再根據流程圖設計 UI / UX ,該有表單的地方,你資料庫要設計好相關的資料表,有了一堆資料表就該建立關聯圖,然後就是拆表與正規化,這些相信書都有教,只是樓主好像還是搞不清楚
,不熟那就把程式寫到熟,你的問題很多,就拆開來一個一個問
不然,一個回答只有兩千字而已,這麼點字,根本回答不完的
kai881216 iT邦新手 5 級 ‧ 2020-05-15 09:40:21 檢舉
我會改進的,感謝你啦,以後問問題我也會放程式碼,避免被誤會,拍謝,第一次問?
@窮嘶發發發
放心啦,我不在意他說我是酸民啦,也不在意他批判我啦。
我只希望他真的有在學習,怎麼罵我也沒關係的。
反正我又沒啥損失,也不會少一塊肉。
現在我很 「修身養性」的。
不會像以前「破口大罵」「瘋狗咬人」(我先自貼我自已標簽了)

所以,啊,算了。等等又要叫我滾了。我先行告退。
player iT邦大師 1 級 ‧ 2020-05-15 19:01:57 檢舉
一般表單的資料異動可以用表單發送(GET或POST)的方式
一次將資料異動到資料庫

可是選課系統卻是任何一個使用者在選一堂課時
就必須檢查資料表與異動資料(所以建議用SQL預存程序, 以交易機制去做)
前端用AJAX去做,後端你用PHP去做吧(回傳JSON或許會比較簡單)

20多年前,我好像有寫過【選課系統】(台北市的某所學校有實際上線使用過)
不過當時記得是ASP(VBScript)的時代,SQL預存程序應該是別人寫的(大約是SQL Server 6.5時期吧?)
當年連AJAX都還沒有,所以記得效能不是很好
kai881216 iT邦新手 5 級 ‧ 2020-05-15 22:45:23 檢舉
ok,我試試看,謝謝!
8
浩瀚星空
iT邦超人 1 級 ‧ 2020-05-14 17:38:14

看到這一句「所以使用XAMPP的PHPmyAdmin。」
我還是很無奈的再說明一次。

phpmyadmin它不是資料庫系統、不是資料庫系統、不是資料庫系統。(很重要要說3次)
它是資料庫的操作介面。

ps:說真的,很無奈。但又無解。

你要學的是sql語法的應用。

再加上,你現在問的問題,是已經把你的作業拿給其它人做了,而不是「問」了。
這點是非常不好的。

至少,你得先說說你目前的資料庫結構出來吧。不要說連結構都沒有就好了。

看更多先前的回應...收起先前的回應...

看了回答 再回頭看問題
恩.../images/emoticon/emoticon39.gif

kai881216 iT邦新手 5 級 ‧ 2020-05-14 21:35:49 檢舉

那也許我問的不好吧,抱歉讓你誤會了,不過我得澄清,我是要問解決方法,不是要叫人幫我做,如果要叫人幫我做,我大可直接請朋友做,不必在這問人

如果有時間在這裏「澄清」,並解釋你所謂的動機。
倒不如來實際去了解我說這些話的用意為何。
你還是沒搞懂我所謂的「問」,是什麼。
居然還能在這邊解釋你的行為不是我說的那樣。
是就是,不是就不是。當然你如果不覺得我說的是對的。也沒關係。
至少,你目前連所謂問題都還沒看到。
我只能看到「試題」,而不是「問題」。

不過我了解你並不懂我說的意思。就如你說了。我「誤會」好了。

kai881216 iT邦新手 5 級 ‧ 2020-05-14 22:23:31 檢舉

要嘴砲請離開,謝謝!

浩瀚星空是超佛心來的.嘿嘿,讓我們繼續看下去.

一級屠豬士
不要這樣說嘛,其實我不佛心的。只會惹人嫌

kai881216
要我離開就離開吧。
最後提醒你,你老師也在這邊看著喔。
不要說我對你不好。

問問題口氣還那麼大
等著出社會被洗臉吧zzz

要我離開就離開吧。
最後提醒你,你老師也在這邊看著喔。
不要說我對你不好。

年輕人口氣不要那麼大
如果有本事口氣大到也無妨
但你今天就是沒有辦法才來求助人
浩瀚星空大是老經驗了
很多問題他是一點就通了
花點時間多思考一下不是件壞事

0
Peter學程式
iT邦新手 4 級 ‧ 2020-05-14 20:08:36

這些問題都可以利用程式解決,以問題一來說:
在學生註冊帳號時直接把他的系級的必修課都一起寫進資料表就好了(用後端做)。
而問題三:
先做SELECT查到上限人數跟目前已選人數,在把邏輯寫在後端做判斷就好了。
問題二也是差不多的邏輯。
所以最重要的是:規劃好完善的資料表。
再來:
PHPmyAdmin只是利用PHP做的MySQL管理工具,你如果想做相關應用,還是要找一門後端語言去做搭配。
PS:小弟只是不專業學生,如果回答的不對還請包涵><

kai881216 iT邦新手 5 級 ‧ 2020-05-14 21:36:34 檢舉

感謝你拉我會努力嘗試的

加油!我不知道您對於後端與資料庫的配合熟不熟練,如果不熟練可以去看看SQL語法怎麼下、瞭解怎麼在後端連結SQL以及下SQL語法,希望你早日成功XD

如果你還是有不懂的,可以站內我,我不會幫你寫code,但是可以提供一點方向給你~

0
code
iT邦新手 5 級 ‧ 2020-05-15 09:28:23

你遇到的問題 SQL 都可以幫你解決喔
你可以去搜尋 SQL select,sum 之類的相關訊息
也許你能從 SQL 的部分先下手,TABLE 欄位 該怎麼規畫之類

最後是我一點淺見啦,不喜歡的話下面可以不要看

這裡是專業的論壇,沒人有空跟你打嘴砲啦
有人說話你覺得難聽,那就別聽阿,不用在那邊硬要回一下
什麼都得不到的~~

kai881216 iT邦新手 5 級 ‧ 2020-05-15 09:36:11 檢舉

謝謝你的建議,我有在找這些該怎麼做,有解決一些問題了

最後我跟你說一下,我想要問的是方向,而不是要請人幫我做,請人直接幫我寫code我覺得這樣沒意義,因為終究還是沒學到東西,我之所以把要求都貼出來也是怕我說了人家看不懂我在講什麼,如今有人給了建議我也知道該從哪個方向下手了,謝謝你的建議啦,遇到酸民打嘴炮以後直接不理他

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-05-15 09:36:21

第一點
有空時請補充一項資訊
這項專題是否「使用程式語言開發系統」或是「單純使用資料庫/SQL指令」

第二點
先弄清楚「基本檔」和「交易檔」的差別
基本檔就是「寫一次,讀多次」:學生資料、課程代號時段、課程資料
交易檔就是「寫(讀)多次」:學生選課資料表

第三點
資料表的定義並不符合「正規化」(database normalization)的規則
如果想要拿高分的話,最好再修改一下

回到問題本身

1.學生選課資料表(目前裡面都沒資料)這個資料表的資料我要透過系統自動看學生哪個班級(學生資料中每個學生都有班級,課程資料中每門課都有開課班級,並標註必選修),就把那個班級的必修課自動加入這個學生的選課資料,要用程式控制嗎?還是資料庫內就能設定了(聽說可以但我不會)

1.在「課程資料」挑出所有「必修」的「開課班級」
2.在「學生資料」挑出所有「學號」(透過1的「開課班級」)
3.寫入「學生選課資料表」,(使用2的學號、班級及1的其他資料)

2.判斷是否衝堂,要跟課程代號時段中的課程代碼作連結,想請問資料庫中能不能直接設定做判斷

比對以下兩項資料, 如果有相同者則為「衝堂」
1.在「課程代號時段」挑出「星期」「節」(透過加選時的選課代號)
2.用「學生選課資料表」「課程代號時段」挑出所有「該學生已選課的」「星期」「節」

3.人數已滿的課程不可加選,這個人數在課程資料中有已收授人數,是否也能從資料庫中判斷呢

1.在「課程資料」挑出「開課人數」「收授人數」(透過加選時的選課代號)
如果收授人數大於或等於開課人數,就不能加選

最後再多嘴一句
如果你把你目前的結果和碰到的問題
都寫在SQL fiddle的話
我保證沒有人會質疑你是「問問題」或是「找人幫忙做」

kai881216 iT邦新手 5 級 ‧ 2020-05-15 09:41:54 檢舉

這樣我有個方向可以做了,謝謝你,感恩

0
混水摸魚
iT邦研究生 5 級 ‧ 2020-05-15 10:11:26

個人覺得php就應該跑在linux上不然內功只能用上三成,很多好用的東西都不能掛在windos環境上。
XAMPP算是誤人子弟的東西,之後你還是要學linux。最好的路徑是 上aws開啟免費試用一年,保你功力大增且出社會後找的到工作。
ubuntu 18.04 環境架設教學 https://www.webteach.tw/?p=2602

php 基礎教學 https://www.webteach.tw/?p=1434

IT邦高手眾多,也都是熱心之人,很多話對新人來說不中聽但聽進去會很受用…加油…

jasonb122 iT邦新手 5 級 ‧ 2020-05-15 16:01:15 檢舉

可以弱弱的問一下這個七成主要是差在哪嗎? /images/emoticon/emoticon06.gif

player iT邦大師 1 級 ‧ 2020-05-15 20:22:57 檢舉

如果只是練習或開發用的話
用Windows當OS也不無不可
只是如果需要正式上線使用的話
還是弄台Linux效能會比較好

我要發表回答

立即登入回答