# "NCU Carpool app" - Independent study in NCU
###### tags: `Android`
[Project on Github](https://github.com/doodoomilk/NCU-carPool)
## APP Introduction
![](https://i.imgur.com/J94yIqK.png)
此APP是專門設計給中央學生的計程車叫車和共 乘平台,使用者可以藉由網路連線到此平台,尋找一起搭車的 同學,藉此平分搭車的車費。
### 製作動機
中央大學,位在桃園市中壢區的一座小山丘上,交通非常不方便,對沒有交通工具的同學來說,只能等20分鐘一班的公車或是搭計程車,但是等公車會花費許多時間,搭計程車則是價格昂貴。為了解決這些交通上的困擾,我設計了 NCU Carpool app(中央大學師生專用的計程車共乘系統)。
鑒於智慧型手機、WIFI和網路的普及,希望能藉由此APP, 來進一步協助中央大學的師生們找尋可信任且能夠共乘的成員。 使用者可以藉由網路連接到此平台,尋找一起搭計程車的人,除了節省等公車的時間,還可以一起平分計程車車錢,達到省錢的目的,也解決交通不便的問題。
### 特色
1. 操作簡單, 方便且迅速:
簡單明瞭的操作介面, 可依照需求, 做相對應的搜尋(ex: 搭車之日期、時間、地點),讓使用者能夠輕易地找到符合需求的共乘。
2. 進行身份認證,保障使用者安全:
必須使用學校信箱進行登入及註冊,註冊時會寄送email認證信做認證,以便確認身份,保障全校師生的安全。
3. 擁有評分制度:
計程車搭乘完畢後,系統會請使用者對搭車之成員做評分。可以藉由查看對方的評分,避免遇到有不良記錄的同學。 透過評分制度,可以讓使用者之乘車品質有所提升。
### 運用技術
- 開發環境: Android Studio
Android app 的開發,最多人使用的這兩個環境: Android Studio 和 Eclipse。 而對新手來說, Android studio 相較於Eclipse,比較好上手且擁有較快的啟動速度、UI 較漂亮、整合了Gradle 建構工具...等等優點,而最重要的就是它是 Google 推出的,專門為 Android 量身定做,相容性更 高。
- 資料庫的選擇: MySQL
選擇使用 MySQL主要有三個原因,第一操作簡單,第二它提供眾多資料格式可以做彈性的介面,而最後一個原因,也是最主要的原因,是因為它免費且簡易查詢的效率較高。
- 如何連接資料庫: PHP
Android 連接 MySQL 資料庫的常見方式之一是使用PHP程式碼,在PHP中設定資料庫的Host、user、pass...等等, 加上“mysqli_connect()”便可以連接到MySQL,而再用其他不同功能之程式碼進行資料的存取。
### 資料傳輸流程
![](https://i.imgur.com/wSmHcbr.png)
- Upload:
由 Android 手機端發請求,經由 PHP 程式碼,傳遞資料到 MySQL 資料庫。
- Download:
從 MySQL 資料庫抓資料,經由 PHP 程式碼,回傳到 Android 手機端。
### APP使用流程
![](https://i.imgur.com/f5LKizk.png)
## APP GUI
### **登入畫面 & 註冊畫面**
為了保障使用者安全,必須用中央大學信箱進行註冊和登入。
註冊時必須填寫相關個人資料,例如:姓名、性別、科系、年級...等 等(如右圖所示)。
註冊後會發送認證信至信箱,認證後即可登入。
![](https://i.imgur.com/rF0a8JY.jpg)
### **主畫面**
主畫面上方有兩個分頁,可以進行分頁的切換:
1. 找共乘:
可以依時間、起點、終點來尋找想要加入的計程車共乘。
畫面會顯示各個共乘的資料,例如:主揪人資料、人數是否已滿、時間地 點...等資訊。
2. 我的共乘:
可以查看自己已經加入的共乘資訊。
3. 刊登共乘:
主畫面右下方的粉紅色按鈕,可以進行新共乘的刊登。
![](https://i.imgur.com/XrJdFbO.jpg)
### **詳細資料畫面**
詳細資料畫面會顯示有關共乘的所有資訊,
除了基本的時間、地點之外,還包括主揪人資料、主揪人評價,
而下方按鈕也可以查看其他乘客的資訊。
![](https://i.imgur.com/9NHcqzh.png)
### **評分畫面**
當搭乘計程車結束,系統會請你對其他乘客進行評分。
而這個評分會影響個人資料「評價」的部分,成為往後其他使用者選擇共乘的依據之一。
![](https://i.imgur.com/diTBqbO.png)
### **我的共乘畫面**
顯示加入的共乘、自己發起的共乘
一樣可以查看詳細資料
### **側邊欄畫面**
畫面上方可以看到目前登入的帳號、使用者姓名、照片。
而下方的按鈕,可以查看個人資料及登出帳號。
![](https://i.imgur.com/loiF75P.png)
## Introduction of Code
### MainActivity.java
- Tab setting: 切換分頁
- Floating button: 刊登共乘用
- NavigationView: 側邊欄setting
- DrawerLayout: 設定整個畫面(讓他可放入側邊欄跟tab)
- Relative xml:
1. activity_main.xml
2. nav_header_main.xml
3. content_main.xml (tab有關)
4. app_bar_main.xml (floating button)
5. dialog_info.xml (查看個人資料用)
### LoginActivity.java
- SharedPreferences: 記住登入狀態
- Login GUI setting
- Relative xml:
1. activity_login.xml
### RegisterActivity.java
- the registration page
- Pattern: regular expression
- Relative xml:
1. activity_register.xml
### add_new_missionActivity.java
- Used to post new carpool mission
- Relative xml:
1. activity_add_new_mission.xml
### misstion_list.java
- the 1st tab: show the list of missions
- RecyclerView: 放cardview的地方
- CardView: 顯示一個一個的mission
- Dialog: used to show the details of mission
- Sorting: the newest to the oldest
- RefreshLayout: 實現下拉刷新功能
- Relative xml:
1. mission_list.xml
2. few_detail.xml
3. dialog_all_detail.xml
### my_list.java
- show carpool mission I launched or I joined
- RecyclerView: 放cardview的地方
- CardView: 顯示一個一個的mission
- Dialog: used to show the details of mission
- Sorting: the newest to the oldest
- RefreshLayout: 實現下拉刷新功能
- Relative xml:
1. my_list.xml
2. dialog_join_detial.xml
3. dialog_launch_detial.xml
4. dialog_people.xml
5. join_few_detail.xml
6. launch_few_detail.xml
### join_rateActivity.java
- the rating system of carpool launcher
- RatingBar: 評分星等
- Relative xml:
1. activity_join_rate.xml
### rateActivity.java, rateActivity2.java, rateActivity3.java
- the rating system of carpool passengers
- RatingBar: 評分星等
- Relative xml:
1. activity_rate.xml
2. activity_rate2.xml
3. activity_rate3.xml