這個作業屬于哪個課程 | 2019學年02學期單紅老師軟體工程實踐 |
---|---|
這個作業要求在哪裡 | 團隊作業第二次——團隊Github實戰訓練 |
團隊名稱 | 松果星球委員會 |
這個作業的目标 | 實作GitHub實訓并完成一個小項目 |
作業正文 | 本博文 |
其他參考文獻 | 建構之法 |
Github連結
https://github.com/Benjamin-Gnep/live-project
項目連結
項目部署至雲伺服器:http://radishbear.top/ky/#/
組員職責分工
學号 | 職責 |
---|---|
221701311 | 整理文檔 |
221701325 | 前端 |
221701410 | 後端 |
221701231 | 前端、後端 |
221701213 | |
131700127 | |
221701129 | |
221701433 | |
221701110 |
部分組員負責的工作
221701410 搖号功能
1.功能描述
該功能為搖号功能,在每次預約結束後會對該次預約的使用者進行搖号,産生中簽的使用者。搖号規則為權重平均數,如果使用者參加了多次未中簽,則中獎的幾率會越來越大;相應的,若使用者以往中過簽,中獎幾率會相應有一定減少。
2.設計實作
- 取資料庫裡預約該次活動的所有使用者,按照權重規則(每中簽一次權重*0.9,每未中簽一次權重*1.1,初始權重100,按照身份證号判斷同一使用者),每次随機産生一個使用者。
- 取該使用者的預約口罩數與目前剩餘口罩數量比對,若使用者預約數小于剩餘口罩數則該使用者中簽,剩餘口罩數減少。
- 循環直到所有人都中簽,或剩餘口罩數已經不夠分給任何一個未中簽的使用者。
3.部分代碼
- 循環取随機使用者
while($total>0)
{
$winID = MyRand($weightArray); // 使用MyRand函數随機取得一個下标,範圍為$winArray的長度
if ($winArray[$winID] == "否" && $numArray[$winID] <= $total) // 若該使用者未中簽且需要的口罩數量小于目前所剩餘數量
{
$winArray[$winID] = "是"; // 該使用者的中獎标志設為1
$total = $total - $numArray[$winID]; // 口罩剩餘數量減少
}
for($x = 0; $x < count($idArray); $x++){
if($winArray[$x] == "否" && $numArray[$x] <= $total) // 如果還存在使用者未中簽且需要的口罩數量小于目前所剩餘數量
{
$flag = 1;
break;
}
$flag = 0; // 如果不存在使用者未中簽且需要的口罩數量小于目前所剩餘數量的情況,将flag置0
}
if($flag == 0) // flag為0則跳出while循環
{
break;
}
}
- 權重随機數:使用較為簡單的算法,可以了解為将所有使用者的權重線段組成一整條線段,然後在此線段上随機産生一個點,判斷該點在哪個使用者的線段上。
function MyRand(array $arr){
$sum = 0;
foreach($arr as $key => $value){
$sum += $value;
$new[] = $sum;
}
$return = 0;
$rand = mt_rand(0 , $sum-1);
foreach ($new as $key1 => $value2){
if($rand < $value2){
$return = $key1;
break;
}
}
return $return;
}
4.優化方向
因為項目的時間較緊,是以在實作的時候基本隻考慮了實作,而并未考慮優化,是以這個簡單的權重随機數算法在面對大量使用者時并不适用,後續會學習更多算法,思考搖号算法的實作和優化。
221701129 中簽功能
-
根據使用者輸入的使用者編号查詢是否中簽,後端擷取使用者輸入的編号并對相應字段進行查詢,
如果“否”就是沒有中簽,反之為“是”,則為中簽,傳回使用者的相關資訊。
131700127 查詢與設定
- 查詢
根據使用者輸入的ID查找對應的win。若win為是,傳回所需要的資訊,若為否,則傳回false。
- 設定
輸入設定所需參數,執行相關SQL語句,更新manage表中相關資料。
221701110 前台資料的可行性判斷
寫了預約時從前台讀取資料時進行初步的預約可行性判斷,主要寫了身份證合法性判定,算法及說明如下:
其中對于算法有解析
function isCreditNo($vStr){
//數組存取各省市編号
$vCity = array(
'11','12','13','14','15','21','22',
'23','31','32','33','34','35','36',
'37','41','42','43','44','45','46',
'50','51','52','53','54','61','62',
'63','64','65','71','81','82','91'
);
//因為身份證号有15位(舊)和18位(新)兩種,是以先對身份證進行判斷是否位純數字的15位或者除最後一位為x或X的18位數字
//利用正規表達式比對
if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) return false;
//判斷前兩位是否符合省份編号
if (!in_array(substr($vStr, 0, 2), $vCity)) return false;
$vStr = preg_replace('/[xX]$/i', 'a', $vStr);
$vLength = strlen($vStr);
//擷取出生年月日,新舊版身份證号擷取方式不一緻
if ($vLength == 18) {
$vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2);
}
else {
$vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2);
}
//出生年月日判定是否合法
if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) return false;
//如果是新版身份證,判斷校驗位是否符合ISO 7064:1983.MOD 11-2的規定,最後一位如果為X/x,則把它替換成數字10
if ($vLength == 18) {
$vSum = 0;
for ($i = 17 ; $i >= 0 ; $i--) {
$vSubStr = substr($vStr, 17 - $i, 1);
$vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11));
}
if($vSum % 11 != 1) return false;
}
return true;
}
github送出截圖

統計的commit次數
次數 | |
---|---|
1 | |
14 | |
4 | |
5 | |
3 | |
7 | |
程式運作截圖
組員遇到的困難和問題
131700127吳章權
- 遇到的困難: PHP文法不夠熟練
- 解決方法: 需要加強對PHP的學習
221701231朱鴻昊
- 遇到的困難:vue項目打包後部署,圖檔無法正常顯示
- 解決方法:經分析 産生原因為vue架構對資源大小加了限制,解決方案:把架構裡對圖檔大小的限制加大
221701433 賴曉輝
-
遇到的困難:
1.初次接觸vue架構,對vue文法和書寫規範不熟悉,安裝nodejs和配置環境變量浪費過多時間
2.前後端資料互動采用ajax和php,對這部分很陌生。
- 解決方法 :團隊裡的小夥伴(鴻昊和苯甲醚)幫助了我很多,鴻昊像帶學生一樣一步步幫助我們熟悉vue,苯甲醚總能對我的問題有及時的回報和幫助
221701410胡錦浩
- 遇到的困難:對php程式設計不太熟悉,效率較低;對前後端互動不了解,難以測試自己的後端代碼
- 解決方法:通過百度和編碼漸漸熟悉php文法;通過前端同學提供的demo包測試了自己的代碼,提高了編碼和debug效率
221701129龔俊鵬
-
Q1:php有一段時間沒用過了,有點生疏,
解決:花了一小部分時間看了以前的代碼,回憶起來
-
Q2:對于php編碼問題,有時候會出現亂碼
解決:在php代碼裡面設定編碼方式,解決了這個問題
-
Q3:echo 輸出問題,慣性的采用了+連結輸出,輸出出現問題
解決:+改為.
-
Q4:資料庫獲得的資料存入數組?
解決:采用array_push存入對應字段
221701110包鵬飛
- 遇到的問題: php運作時一直顯示數字和小數得一串字元,
- 解決方法: 後面重新寫了一個拷貝過去就好了,隻是還不懂為什麼
221701213胡世鑫
- 遇到的困難:一開始對于本次實戰訓練的需求了解不夠深刻,導緻代碼功能缺少,并且對于php中的資料庫操作的代碼忘記較多,在網上查詢了較多内容,浪費了大量時間。
- 解決方法:需增強對程式設計任務的需求了解
221701311李昊朋
- 遇到的困難:環境變量配置不好 無法正确運作clone下來的代碼
- 解決方法: 多百度多思考
- 另附:這次起晚了 導緻一天都沒跟上團隊節奏 實屬不應該 隻能落魄寫文檔。。 下次保證不會出現這種情況
221701325彭陳浩
- 遇到的困難:遇到的問題就是axios和後端的資料互動、表格資料的動态渲染以及vue架構的入門學習
- 解決方法:平時多積累 多學習
評估每位組員的貢獻比例
貢獻度 | |
---|---|
9 | |
11 | |
10 | |
20 | |
PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 650 | 740 |
Estimate | 估計這個任務需要多少時間 | ||
Development | 開發 | 610 | 690 |
Analysis | 需求分析 (包括學習新技術) | 240 | 400 |
Design Spec | 生成設計文檔 | 15 | |
Design Review | 設計複審 | ||
Coding Standard | 代碼規範 (為目前的開發制定合适的規範) | ||
Design | 具體設計 | ||
Coding | 具體編碼 | 200 | |
Code Review | 代碼複審 | ||
Test | 測試(自我測試,修改代碼,送出修改) | 40 | |
Reporting | 報告 | 30 | |
Test Repor | 測試報告 | ||
Size Measurement | 計算工作量 | ||
Postmortem & Process Improvement Plan | 事後總結, 并提出過程改進計劃 | ||
合計 |
221701129 龔俊鵬
80 | 75 | ||
395 | 345 |
221701410 胡錦浩
250 | 305 | ||
60 | |||
120 | 140 | ||
35 | |||
300 | 340 |
221701110 包鵬飛
25 | |||
360 |
221701231 朱鴻昊
280 |
131700217 吳章權
50 | |||
550 | 640 |
221701325 彭陳浩
221701213 胡世鑫
325 | |||
350 |
對團隊選題提問的回答
接受助教和老師的建議 已經更換選題
我們的新思考和想法
經過和第三組的商讨,我們決定更改我們的選題。經過讨論決定我們小組準備做校内安利平台,一開始我們僅打算做食堂的安利平台,旨在推銷校内及校園周邊美食,後來考慮了一下這樣好像沒什麼市場,是以就改成全類安利平台。