軟體工程實踐結隊作業二

2021-09-24 18:13:38 字數 3308 閱讀 4694

1.吳海林(031502430)

2.蘇偉鵬(031502331)

github 位址

軟工實踐結對第二次作業鏈結

最好的資料:

300個學生只有56個人沒有選中部門 而部門有選到自己想要的學生

input_data位址

output_data位址

資料生成原理:

隨機數生成法,然後就是將生成的資料以json格式寫入到input_data.txt中去
隨機生成程式

所考慮的因素:

1.要考慮學生選多個部門時,不能生成相同的部門編號

2.學生所選的多個tags標籤以及乙個部門所擁有的多個標籤應該不同

3.學生以及部門的多個時間應該有所限制,就是不能有太多的時間個數

4.要考慮部門的限制人數

5.部門是按順序生成 d1-d20

不足:
1.受限制條件多

2.隨機生成差

流程圖:

資料建模:

1.選部門存在學生的選擇決策權,學生可選填寫多個志願,部門可選多個學生,但是我們這裡明確規定乙個學生可選擇乙個部門(其他同學可能乙個學生可選多個部門  可能會比較麻煩)

2.學生所選部門在該學生的第幾個志願以及志願個數會影響學生對部門的選擇以及部門對該學生的選擇

3.學生的課餘時間與部門活動時間越是匹配,部門就越喜歡該學生

4.學生的標籤與部門標籤越是匹配, 部門越是喜歡

5.從以上的分析我們可以計算出學生對該部門的喜歡權值,分三部分計算 rank1 rank2 rank3,其中rank1代表志願數和第幾志願所有有的權值 ,rank2代表時間匹配所擁有的權值,rank3代表標籤匹配所擁有的權值,最後把三個加起來 即rank_value[i][k] = rank1 + rank2 + rank3 表示第i個同學對第k個部門的權值 ,最後根據這個權值進行部門學生匹配

匹配程式思路:
1.我們先計算出每個學生對每個部門的權值

2.對部門進行遍歷,沒遍歷到乙個部門,就計算出所有學生對該部門的權值 存在乙個結構體當中去,然後排序(權值大的優先),該部門沒進入乙個學生,則member_limit-- 即限選人少減一,然後將該學生的學號新增到該部門的member陣列中去,並將該學生flag(有無選部門)設定為true 說明已選中部門,不能在被其他部門選中,因為我們規定乙個學生只能選乙個部門。

3.然後跑一遍admitted結構體 該結構體存每個部門選到的學生,如果所選到的學生為0 則將該部門的department_sno新增到unluck_department中去

4.最後跑一遍stu結構體 該結構體存每個學生的資訊 假如該學生的flag為false 說明沒被選中,則新增到unlucky_student中去

匹配程式的實現方式:

先計算權值

然後遍歷跑一遍

void match_program::match_algorithm() 

sort(wishtmp, wishtmp + stu_num, cmp1); //排序 根據權值 學生對該部門

addmitted[i].department_no = dep[i].department_no;

for (int j = 0; j < stu_num; j++)

else

continue;

}if (wishtmp[j].value == 0) break;}}

// 查詢unlucky_department

for (int i = 0; i < dep_num; i++)

}//查詢unlucky_student

for (int i = 0; i < stu_num; i++) }}

1.主要包括規範注釋、合理運用空行、**格式化、無冗餘**及無廢棄**等
佐證:

1.本次作業,我們所考慮的就是乙個學生只能新增乙個部門,但是報志願的時候最多可以報五個,這樣實現會簡單一點;

2.在實現匹配的過程中我覺得還是有些不足的地方,就是該學生的選擇多個部門,對不同部門的權值不一樣,但是我們在匹配過程中,只從頭到尾遍歷部門,然後對其進行選擇,這可能會將這位學生選擇到他所有所選部門中權值較低的乙個中去,這可能對該學生還是蠻不公平;

3.計算權值,我覺得還還可以改進一下,就是將部門的限制人數也考慮到計算權值中去,這樣匹配程式可能會更好

4.因為自動生成資料,每次匹配完後unlucky_department都為null 就是每次部門都是能選中人的 ,感覺這樣還是可以去改進的。

5.每次生成的資料都是300名學生和20個部門。

1.我的感受:本次作業比起上次作業,確實有趣了很多,畢竟能敲**,上次作業也就畫畫圖什麼的,結對最大的好處就是可以共同討論問題,共同解決問題,每當遇到bug的時候可能自己找到眼花繚亂,隊友可能只需要一會兒的功夫,這就節約了很多時間,還有就是分工合作,加大了作業的效率。當然為了這個作業,也和隊友熬了一夜,想想多麼可怕,但是又是開心的,因為學習是一件快樂的事,哈哈哈哈!!!!作業固然重要,從中能學到很多東西。不僅可以從網路學,還可以從隊友身上學習。所以啊,結對給我的最好的感受是:分憂解難,增強效率

3.閃光點: 熬夜寫**不容易啊,當然還是隊友挺給力的,每當找不到bug ,隊友能及時找出來,省了一大把部分時間去實現其他程式。還有就是分工協作明確,高效。

4.建議:多多交流,多多研究。

畫面:

軟體工程(2019)第二次結隊作業

我們在剛開始上課的時候介紹過乙個小學四則運算自動生成程式的例子,請實現它,要求 專案名稱 小學四則運算自動生成器 審查人王文博審查日期 2019 5 3 名稱 main.cpp 作者 徐子健 檔案結構 序號審查專案 重要性結論 備註 1 標頭檔案和定義檔案的名稱是否合理?重要是 2標頭檔案和定義檔案...

軟體工程實踐總結作業

對比開篇部落格你對課程目標和期待,希望通過實踐鍛鍊,增強計算機專業的能力和就業競爭力 對比目前的所學所練所得,在哪些方面達到了你的期待和目標,哪些方面還存在哪些不足,為什麼?總結這門課程的實踐總結和給你帶來的提公升,包括以下內容 1 統計一下,你在這門軟體工程實踐中,完成了多少行的 2 軟工實踐的各...

軟體工程實踐總結作業

1 對比開篇部落格你對課程目標和期待,希望通過實踐鍛鍊,增強計算機專業的能力和就業競爭力 對比目前的所學所練所得,在哪些方面達到了你的期待和目標,哪些方面還存在哪些不足,為什麼?在與團隊合作中成長了很多,在程式設計方面還是有很多不足。2 總結這門課程的實踐總結和給你帶來的提公升,包括以下內容 1 統...