---
# System prepended metadata

title: 2021資料庫系統專題： 政大課程評價系統

---

2021資料庫系統專題： 政大課程評價系統
===
[TOC]

### 專題題目、組名
### 組長及組員姓名學號與系級

### 每位成員負責之任務分工、貢獻百分比

### 需求分析

    政大的學生目前在選課的時候，若是想知道某堂課的評價，目前的做法有2種
    1. 加到追蹤清單後，查看使用政大官方上傳的評價
    2. 自己google
    
    我們認為政大缺乏一個統一的課程評價平台，
    所以我們決定開發一個統整所有政大課程資訊的平台
    希望能解決同學在選課時資訊不足的問題
    
### 系統功能

    
    主要的功能包含瀏覽課程跟課程評價，上傳修改跟刪除課程評價，
    另外，與一般課程評價網站不同的是多了以下幾個功能：
    1.留言板（課程底下有留言板可以交流）
    2.貼文版（使用者可以發布貼文）
    3.收藏課程（使用者可以將課程收藏）
    4.課程尋找過濾器（提供親切的圖形介面供使用者過濾出自己想找的課程）
    5.課程資源分享(同學能分享筆記跟考古題)
    6.二手書交易（此功能的前端尚未實作，不過有先規劃資料庫，未來可能會移除此功能）


### ER Model

//畫圖


### Relational Schema

//畫圖


### 系統架構

//放圖


### 心得



## 成員

    資科三 謝惟寧 
    資科三 李順斌
    資科三 郭沛澐
    資科四 鄭家宇 
    金融四 陳冠全 
    資科四 張昱威 
    資科四 陶亮清
    
## 工作分配
謝惟寧、李順斌：12/12前 資料需求分析、系統功能分析
陶亮清、陳冠全：12/19前 ER model, Relational Schema設計報告
鄭家宇、張昱威、郭沛澐：12/26前 系統架構(系統功能、開發的程式語言、DBMS與工具、系統模組)

##  開發問題

1. 政大課程查詢抓下來excel檔沒有照 "必/選修"、"整開"、"通識"、"體育/國防" 分 需要自己分類
    
2. 抓不到過去幾學年的資料

3. 沒有系上教授資料

4. Professor

### 基本feature

    一個web app
    提供政大學生（有@g.nccu.edu.tw帳號的人才行）
    課程評價跟課程資源分享，
    功能包含上傳跟瀏覽課程評價（統計過的)
    還有分享課程資源（上傳/下載檔案）
    （課程資料是齊全且整理過的）
  


### 進階feature

    為GDSC選課系統專案提供課程評價（提供資料庫裡的資料）
    
    學生可以crud自己的發表跟分享並幫其他貼文按讚（類似FB）
    
    //以下目標還在計畫當中，不會實作
    
    學生彼此可以聊天（政大選課+交流平台）（類似可以聊天的DCARD）

    學生彼此可以交易（政大電商平台）（類似蝦皮）

## Schema
user
course
courseFeedBack
professor: name, self_URL, lab_URL, 職位, e-mail, 學歷, 大頭照, department
department: name, URL, location, professors

------------------------------

## 簡單的開發進度時間表

**1/11期末考**
![進度追蹤](https://i.imgur.com/erDdk0j.jpg)

![Requirement](https://i.imgur.com/ueRVHuC.jpg)



## PDF
[12/12](https://github.com/niummxvy/Course_Evaluation/blob/main/Introduction.pdf)

[12/19](https://github.com/niummxvy/Course_Evaluation/blob/main/ER%20Model%20%26%20Relational%20Schema%20Design%20Report.pdf)


[12/26](https://github.com/niummxvy/Course_Evaluation/blob/main/System%20Architecture.pdf)




--------------------------------
# 以下資料供上台ppt跟作業pdf製作參考：

系統架構 系統功能 程式語言 ＤＢＭＳ 工具 系統模組 開發上的問題：



### 前端： 

使用 React.js + material UI.js

### 後端：

使用 express.js 

### ＤＢＭＳ：

使用mongo db 

使用 mongoose.js 進行資料CRUD


### 使用到的第三方ＡＰＩ：

google AUTH(google 第三方認證登入ＡＰＩ)


### 使用到的cloud hosting service
暫時使用heroku的免費方案放置前端web app跟後端server
正在嘗試改為使用AWS

使用mongo atlas免費方案作為雲端資料庫


### 架構圖：

（待補．． 12/25號前會補上 by 惟寧）




### 系統功能/來源：

以從政大課程查詢網抓下來的excel課程檔為核心，加上使用者登入登出系統，
拼湊成一個課程評價網，主要的功能包含瀏覽課程跟課程評價，上傳修改跟刪除課程評價，
另外，與一般課程評價網站不同的是多了以下幾個功能：
1.留言板（課程底下有留言板可以交流）
2.貼文版（使用者可以發布貼文）
3.收藏課程（使用者可以將課程收藏）
4.課程尋找過濾器（提供親切的圖形介面供使用者過濾出自己想找的課程）
5.二手書交易（此功能的前端尚未實作，不過有先規劃資料庫，未來可能會移除此功能）




### 開發難點：

##### 1.資料來源：

1-A.目前需要個電算中心要過去年份的課程excel檔，不然目前只有110學年上學期的課程資料
1-B.更完整的資料，我們希望能有教授(professor)跟系所(department)的完整詳細資料，這樣本網站便可以提供關於修課更詳細的資料並給使用者做討論


##### 2.經費：

免費的cloud hosting server速度慢，影響使用者體驗

##### 3.使用者行為
因為有提供檔案上傳功能，對超出預期的使用者行為目前沒有對應的處理方法（例如：使用者張貼教授不希望公開的東西）


##### 4.資訊安全：
無法保證本網站不會被駭入，所以使用第三方登入系統，仍然有學號，頭貼，EMAIL等私密資料會被本網站存取


### DEMO網址:

（[點此](https://nccucourseguide.herokuapp.com/integrated)）




### 資料處理：

從政大課程excel檔開始，觀察９碼科目代碼的編碼規律，先簡單將課程分類成係開 整開 通識 體育 後，再細分成不同子類別 e.g.通識可再分成人文／社會／自然

然而，若要擴展成一個能提供教授跟系所等其他詳細資料的網站，只靠此課程表的資料仍遠遠不足，所以在資料庫規劃跟實作上有不同，不同的地方詳細如下：

１．規劃：

共有
Department（系所）
professor（教授） 以department為外來鍵（一個教授僅屬於一個科系）
course（課程）  以department跟professor為外來鍵
user（使用者）
userFeedback(課程評價) 以user跟course為外來鍵
userResource(課程資源) 以user跟course為外來鍵
userPost(使用者貼文)

照上面的規劃：
使用course join professor跟department 即可保證提供的課程資料是最新的，
且教授資料更新時，僅需要更新professor這張table，不需要連同更新course

若為效能考量，不想要每次查詢課程時需要等待join資料表的時間，也可定期執行query將完整的課程資料寫入一張快取資料表，省去大query的等待時間


２．實際情況：
共有
course（課程） 
user（使用者）
userFeedback(課程評價) 以user跟course為外來鍵
userResource(課程資源) 以user跟course為外來鍵
userPost(使用者貼文)

因為沒有跟學校要到教授跟系所得詳細資料，所以照規劃設計資料庫，它的department跟professor是沒有資料的
所以我們直接將課程資料excel檔轉成csv檔後再放入資料庫，使得這張資料表沒有外來鍵也沒有其他資料表可以join，
使得本網站可以提供的資料僅有課程，沒有教授跟系所等資料


## 1/1 小組會議：分配code

Google API：向Google發送request，得到response

MVC(Model, View, Controller)： 舉廚房的例子，
Model=models：食材；
View=router：點菜/客人：提出request，接收廚師的response；
Controller=controllers：後台/廚師：接收客人的request，用models的食材做出客人的需求，再response給客人

有一些js檔是MVC都有，形成pipeline

`Course.find({type:type, semester}) // find回傳多個，findOne回傳一個`
->`SELECT type, semester FROM Course`

~~user: GoogleSignIn~~

xlsx -> csv -> js

每人：資料庫、API規劃與設計、大家一起做功能設計
~~code是其他組員協助完成的~~ 已分工，看最下面

course, courseFeedBack. courseResource是最主要的

順斌：Professor, department

主要執行檔為`index.js`
`index.js`
`app.use('/course', courseRoutes); // 有關/course的連接是由courseRoutes這個路由器負責()`

`course.js`
`router.post('/department', getCoursesByDepartment); // 有關於/department的資料取得，是由getCoursesByDepartment負責`

`.post`把資料放body
`.get`直接把資料放到網址上(`?`後面的東西)

`router.use(function(req, res, next) {`
`    res.header("Access-Control-Allow-Origin", "*"); `
`   // update to match the domain you will make the request from`
`   // res.header("Access-Control-Allow-Headers", Origin, X-Requested-With, Content-Type, Accept");`
`    next();`
`  }); // 可以進來的網域有哪些`
  
`mongoose`: 和資料庫連接

## 小組分工表
惟寧: 前端
亮清: courseFeedBack
昱威: courseResource
冠全: user
順斌: csv
沛澐: post
家宇: course








