日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件工程实践2017结对第二次作业

發(fā)布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件工程实践2017结对第二次作业 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

結(jié)對成員:吳君毅(031502629),吳偉根(031502631)
Github鏈接:https://github.com/n9705/Dep-Stu

一、 題目要求

構(gòu)造部門和學生輸入數(shù)據(jù)的生成程序,實現(xiàn)一個智能自動分配算法,根據(jù)輸入信息,輸出部門和學生間的匹配信息(一個學生可以確認多個他所申請的部門,一個部門可以分配少于等于其要求的學生數(shù)的學生) 及 未被分配到學生的部門 和 未被部門選中的學生。
分工情況:基本上是我負責數(shù)據(jù)生成程序,偉根負責部門學生自動分配算法,遇到問題互相幫助探討。

二、 數(shù)據(jù)生成程序

這部分主要是由我負責
首先根據(jù)題目要求創(chuàng)建兩個結(jié)構(gòu)體數(shù)組部門和學生,要滿足的條件如下:

學生:

  • 空閑時間段(設置最大為12個,且同一天的不同時間段不能重疊,且根據(jù)實 際情況,時間不能是晚上10點后到第二天早上8點之間,且空閑時間段以兩小時為單位)
  • 學號(不可重復)
  • 意向部門(不可重復,最多5個)
  • 興趣標簽(不可重復最多8個)

    部門:

  • 活動時間(設置最大為12個,且同一天的不同時間段不能重疊,且根據(jù)實際情況,時間不能是晚上10點后到第二天早上8點之間,活動時間為2小時)
  • 部門人數(shù)限制(10-15之間)
  • 部門編號(不可重復)
  • 興趣標簽(因為一個部門主要比較專業(yè),所以興趣標簽定為不超過3個)
    原理:通過不斷的循環(huán),給學生和部門的結(jié)構(gòu)體數(shù)組賦值,其中因為要模擬隨機性,所以大量用到了隨機數(shù)的算法,除了學生學號和部門編號,其他都是隨機函數(shù)組合出來的。說是隨機,但是同一個學生或部門里的一些信息也不能重復,為了避免這個情況,就要給之前隨機出的結(jié)果做統(tǒng)計,不能重復,具體實現(xiàn)就是把之前的結(jié)果送進數(shù)組里然后每生成一次就查重一次。最后輸出的時候,用Json的格式進行輸出。
    核心代碼:
int random_num(int a, int b)//產(chǎn)生 [a,b]的隨機數(shù) {int rander;rander = (rand() % (b - a + 1)) + a;return rander; } for (int j = 0; j<a; j++)//產(chǎn)生興趣標簽 {int b;b = random_num(1, 11);for (int x = 0; x<j; x++)//興趣標簽不能重復 {if (num[x] == b){b = random_num(1, 11);x = 0;}}num[j] = b;stu[i].tags[j] = ttags[b];}

輸出文本示例:https://github.com/n9705/Dep-Stu/blob/master/project/input_data.txt
學生輸出示例:

部門輸出示例:

不足:

  • 空閑時間因為隨機,雖然當天的時間段不會重復,但是因為星期幾是隨機出來的,所以星期的排列并不是按照從小到大的順序排列,而是隨機排列的。
  • 因為沒有給興趣標簽歸類,所以給部門匹配出的興趣標簽會很雜,比如匹配給一個部門加上了游泳和電腦這兩個標簽,就會感覺這部門不太正經(jīng),后期優(yōu)化下。
  • 生成數(shù)據(jù)用了C++輸出,然后自己加上格式,并沒有用Json的庫輸出,在但是還是在json_CN上校驗通過,輸出了正確的Json格式。

    三、數(shù)據(jù)建模及匹配程序的思路及實現(xiàn)方式

    數(shù)據(jù)建模:這部分主要我負責。從生成輸入數(shù)據(jù)的txt中用Json把數(shù)據(jù)解析出來然后裝進部門和學生的結(jié)構(gòu)體數(shù)組里。
    核心代碼:

  • ifstream ifs;ifs.open("input_data.txt");assert(ifs.is_open());Json::Reader reader;Json::Value root; if (!reader.parse(ifs, root, false)){return -1;} for (int i = 0; i < 300; i++)//給學生結(jié)構(gòu)體數(shù)組賦值{int size;size = root["students"][i]["freetime"].size();for (int j = 0; j < size; j++)//給空閑時間賦值{stu[i].free_time[j] = root["students"][i]["freetime"][j].asString();}stu[i].student_no = root["students"][i]["student_no"].asString();//學號賦值size = root["students"][i]["applications_department"].size();for (int j = 0; j < size; j++)//給意向部門賦值{stu[i].applications_department[j] = root["students"][i]["applications_department"][j].asString();}size = root["students"][i]["tags"].size();for (int j = 0; j < size; j++)//給興趣標簽賦值{stu[i].tags[j] = root["students"][i]["tags"][j].asString();}}

    匹配程序的思路:這部分主要由偉根負責。先按照學生的意向部門匹配,當部門編號匹配時再進行判斷學生的freetime和部門的event schedules是否滿足條件,條件為部門某天的活動時間范圍小于學生的當天的空閑時間,如果滿足,再判斷興趣標簽是否有至少一個符合意向部門的興趣標簽,如果有,再判斷部門收的人數(shù)是否已經(jīng)達到member_limit,如果沒有,則把這個人放入這個部門,然后把該學生的標志修改為已加入。
    原理圖:

    核心代碼:

    void application(int num) {for(int i=0;i<5;i++) //至多5個意向部門 {for(int j=0;j<20;j++) //至多20個部門 { int count=0; //計數(shù)變量 if(stu[num].applications_department[i]==dep[j].department_no) //第num個學生的第i個意向部門編號匹配到相應部門 {set_student(num); //對該學生的freetime進行處理 set_department(j); //對該部門的event_schedule進行處理 for(int stu_time_count=0;stu_time_count<12;stu_time_count++) //至多12個空閑時間段 {for(int dep_time_count=0;dep_time_count<12;dep_time_count++ ) //至多12個活動時間段 {if(str1[stu_time_count].compare(str4[dep_time_count])==0) //匹配星期幾 {if(str2[stu_time_count].compare(str5[dep_time_count])>=0&&str3[stu_time_count].compare(str6[dep_time_count])<0) //時間段比較 {dep[j].save[count] = stu[num].student_no; //滿足條件就將該學生的學號存入對應的數(shù)組 count++; //計數(shù)加一 if(count>dep[j].member_limit) continue;}}}}} }} }

    四、 代碼規(guī)范

    1、 大括號一定要單獨一行
    2、 每個函數(shù)都要有注釋,解釋其功能

    3、 定義一個數(shù)組或者變量時,要給出注釋說明其功能

    五、 結(jié)果評估

    輸出的unlucky_student人數(shù)比較多,大概一百八左右,原因是匹配程序的選擇條件比較簡單,先是意向部門編號匹配然后再是時間匹配,而且是由于for語句循環(huán)的問題,就較為簡單的輸出該學生被一個部門入取后不再被其他部門入取。

    六、 結(jié)對感受

    這次作業(yè)感覺完成的不是很好,主要是因為留給作業(yè)的時間太少。由于國慶假期出門旅游,一號出去六號才回來,累得半死七號睡了一天,導致工期嚴重拖后。。八號才正式開始作業(yè),感覺很對不起自己的隊友,是我拖累他了。緊趕慢趕加班熬夜趕才完成了作業(yè)的大概,還有很多需要完善的。。真的很想早點回來趕作業(yè),可是無奈票是早就買好的,沒法改,花了錢在外面又不能不玩盡興。。唉,導致作業(yè)很趕,自己累也拖累隊友,不說了,都是淚。
    這次作業(yè)給我最大的收益就是了解了Json這種輕量級的數(shù)據(jù)交換格式。對代碼的輸出標準格式有了更深刻的認識,并且掌握了json的數(shù)據(jù)解析轉(zhuǎn)化,還有熟悉了隨機數(shù)的用法并且如何在一個給定的范圍隨機且不重復。
    結(jié)對的感受,最大的就是兩個人代碼風格的差異,所以要制定代碼規(guī)范。還有遇到問題一定要制定計劃,及時溝通,主動聯(lián)系,不然可能會導致對對方的進度有點不了解且合并代碼的時候會因為雙方做的接口或者是變量設定不一樣導致各種問題,這也僅僅是兩個人的小團隊,如果是多個人,那會更麻煩,所以學好軟件工程是很重要的。還有就是,以后的作業(yè)和娛樂一定要安排好= =不能像這次一樣這么趕了。

    轉(zhuǎn)載于:https://www.cnblogs.com/n9705/p/7642620.html

    總結(jié)

    以上是生活随笔為你收集整理的软件工程实践2017结对第二次作业的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。