北京大學2025年計算機科學與技術(軟件工程)專業(yè)實踐課程設計指導試題及答案_第1頁
北京大學2025年計算機科學與技術(軟件工程)專業(yè)實踐課程設計指導試題及答案_第2頁
北京大學2025年計算機科學與技術(軟件工程)專業(yè)實踐課程設計指導試題及答案_第3頁
北京大學2025年計算機科學與技術(軟件工程)專業(yè)實踐課程設計指導試題及答案_第4頁
北京大學2025年計算機科學與技術(軟件工程)專業(yè)實踐課程設計指導試題及答案_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

北京大學2025年計算機科學與技術(軟件工程)專業(yè)實踐課程設計指導試題及答案考試時間:______分鐘總分:______分姓名:______一、項目背景與需求分析你正在參與開發(fā)一個名為“校園活動助手”的Web應用程序,旨在幫助大學師生發(fā)現(xiàn)、參與和管理校園內的各類活動。目前,校園里信息分散,學生獲取活動信息不便,活動組織者也缺乏有效的活動發(fā)布和管理工具。1.1需求描述*目標用戶:在校大學生、研究生、教師。*核心功能:*活動瀏覽與搜索:用戶可以瀏覽系統(tǒng)中的所有活動,也可以根據(jù)關鍵詞、活動類型(如講座、比賽、社團招新、志愿者活動)、時間、地點等條件進行搜索。*活動詳情查看:用戶可以查看活動的詳細信息,包括活動名稱、描述、時間、地點、主辦方、參與人數(shù)限制、活動狀態(tài)(報名中、進行中、已結束)、活動相關圖片等。*活動報名與簽到:用戶可以在線報名感興趣的活動,并根據(jù)活動要求進行簽到(例如,提供簽到碼或地理位置簽到)。*個人中心:用戶可以查看自己已報名的活動列表、管理個人信息(如昵稱、頭像)、查看報名歷史。*活動發(fā)布與管理(僅限管理員):管理員可以發(fā)布新活動,編輯或刪除已有活動,查看活動報名情況,管理用戶信息。*非功能性需求:*系統(tǒng)應具備良好的用戶界面,操作簡單直觀。*系統(tǒng)應能支持至少百級用戶同時在線瀏覽和報名活動。*活動報名信息應保證準確性和安全性。*系統(tǒng)應提供簡單的搜索功能,確保搜索結果的的相關性。1.2任務要求請基于以上需求,進行初步的需求分析,輸出一份簡潔的需求分析文檔。內容應包括:*列出核心功能的用戶故事(UserStories),至少包含用戶和管理員視角下的5個核心用戶故事。*識別系統(tǒng)的主要用戶角色,并簡要描述其權限。*提出至少3個關鍵的業(yè)務需求或規(guī)則。二、系統(tǒng)設計基于上一部分的需求分析,請進行系統(tǒng)設計,輸出系統(tǒng)設計文檔的主要內容。2.1系統(tǒng)架構設計*描述你建議的系統(tǒng)整體架構(例如,選擇單體架構還是微服務架構,并說明理由)。*繪制系統(tǒng)的高層架構圖(文字描述即可,無需圖形)。*說明前后端分離的設計思想,并簡述前后端各自的主要職責。2.2數(shù)據(jù)庫設計*設計系統(tǒng)所需的數(shù)據(jù)庫模型,包括至少3個核心的數(shù)據(jù)表(例如,用戶表、活動表、報名表)。*為每個數(shù)據(jù)表設計字段,明確每個字段的名稱、數(shù)據(jù)類型、是否允許為空、以及主鍵或外鍵約束。*簡要描述這些數(shù)據(jù)表之間的關系。2.3接口設計*針對核心的“活動瀏覽”和“活動報名”功能,設計RESTful風格的API接口。*對于每個接口,請說明:*接口URL(Endpoint)*請求方法(GET/POST等)*請求參數(shù)(路徑參數(shù)、查詢參數(shù)、請求體)*響應數(shù)據(jù)格式(例如,JSON結構)*簡要說明接口的功能。三、核心功能實現(xiàn)選擇上述系統(tǒng)設計的某個核心模塊(例如,活動詳情查看或活動報名功能),使用你熟悉的編程語言和框架(如Java/SpringBoot,Python/Django/Flask,Node.js/Express等),完成該模塊的關鍵部分代碼實現(xiàn)。3.1實現(xiàn)要求*實現(xiàn)后端API接口的核心邏輯,例如,接收活動ID,查詢并返回活動詳情(包括活動基本信息、主辦方信息、用戶報名狀態(tài)等)。*實現(xiàn)必要的數(shù)據(jù)庫交互代碼(例如,使用ORM框架或編寫SQL語句)。*編寫單元測試,確保核心功能的正確性。*(可選)簡要說明你選擇的技術棧,并解釋選擇該技術棧的原因。3.2代碼規(guī)范*代碼應具備良好的可讀性和可維護性。*遵循常見的代碼規(guī)范(例如,命名規(guī)范、代碼格式化)。四、測試與驗證針對你在第三部分實現(xiàn)的核心功能,設計測試用例,并進行測試。4.1測試用例設計*設計至少5個測試用例,覆蓋正常流程和異常情況。*對于每個測試用例,明確測試目的、輸入數(shù)據(jù)、預期輸出。*例如,測試用例可以包括:成功獲取存在的活動詳情、嘗試獲取不存在的活動詳情、檢查已報名用戶獲取活動詳情時返回的信息、檢查未報名用戶獲取活動詳情時返回的信息等。4.2測試過程*簡要描述你進行測試的方法和過程。*說明如何驗證測試結果是否符合預期。五、文檔撰寫為你在第三部分實現(xiàn)的核心功能模塊,撰寫一份簡潔的設計文檔。*文檔應包括:模塊名稱、模塊功能描述、主要接口列表(URL、方法、參數(shù)、響應)、關鍵類/方法設計(簡要說明)、數(shù)據(jù)庫表關聯(lián)說明(如果涉及)。*確保文檔內容清晰、準確、易于理解。---試卷答案一、項目背景與需求分析1.1需求分析文檔*用戶故事(UserStories):*作為學生,我想要瀏覽所有校園活動,以便了解可參與的機會。(Asastudent,IwanttobrowseallcampusactivitiessothatIcanunderstandavailableopportunities.)*作為學生,我想要根據(jù)關鍵詞搜索活動,以便快速找到感興趣的內容。(Asastudent,IwanttosearchforactivitiesbykeywordsothatIcanquicklyfindinterestingcontent.)*作為學生,我想要查看特定活動的詳細信息,以便決定是否參與。(Asastudent,IwanttoviewdetailedinformationaboutaspecificactivitysothatIcandecidewhethertoparticipate.)*作為學生,我想要在線報名參加活動,并收到報名成功的確認。(Asastudent,Iwanttoregisteronlineforanactivityandreceiveconfirmationofsuccessfulregistration.)*作為學生,我想要查看自己已報名的活動列表,以便管理我的參與情況。(Asastudent,IwanttoviewalistofactivitiesIhaveregisteredforsothatIcanmanagemyparticipation.)*作為管理員,我想要發(fā)布新的校園活動,以便向學生通知信息。(Asanadmin,IwanttopublishnewcampusactivitiessothatIcaninformstudents.)*作為管理員,我想要管理現(xiàn)有活動的信息(編輯/刪除),以便保持信息的準確性。(Asanadmin,Iwanttomanageexistingactivityinformation(edit/delete)sothatIcanmaintaininformationaccuracy.)*用戶角色及權限:*學生(Student):*權限:瀏覽所有活動、按條件搜索活動、查看活動詳情、報名/取消報名活動、查看個人中心信息、查看已報名活動列表。*管理員(Admin):*權限:發(fā)布新活動、編輯/刪除活動、查看所有活動列表及報名情況、管理用戶信息(可能包括查看、禁用等)。*關鍵業(yè)務需求或規(guī)則:1.活動報名人數(shù)不能超過設定的上限。2.同一用戶對同一活動只能報名一次。3.活動需要有關聯(lián)的主辦方,主辦方信息應可查看。4.活動狀態(tài)應自動更新(例如,報名截止后變?yōu)椤斑M行中”或“已結束”)。1.2任務要求解析*解析思路:需求分析是軟件開發(fā)的基礎。首先通過用戶故事從用戶角度描述功能需求,簡潔明了。然后識別系統(tǒng)參與者(用戶角色),明確不同角色的權限邊界。最后,提煉出關鍵的業(yè)務邏輯和規(guī)則,這些是系統(tǒng)必須遵守的約束。此部分旨在考察學生從模糊需求中提取結構化信息、進行初步抽象和建模的能力。二、系統(tǒng)設計2.1系統(tǒng)架構設計*建議架構:單體架構。*理由:*項目規(guī)模:“校園活動助手”功能相對單一,用戶量初期可能不大,單體架構足以滿足需求,開發(fā)部署簡單。*開發(fā)效率:單體架構開發(fā)流程更短,團隊協(xié)作相對容易,適合快速迭代。*復雜性:對于此項目,引入微服務會增加架構復雜度和運維成本,初期不必要的。*高層架構圖(文字描述):*系統(tǒng)由一個前端應用(Web界面)和一個后端服務組成。*前端通過HTTP請求與后端服務交互。*后端服務負責處理所有業(yè)務邏輯,包括用戶認證、活動數(shù)據(jù)管理、報名管理等,并通過數(shù)據(jù)庫進行數(shù)據(jù)持久化。*前后端分離說明:*前端:負責用戶界面展示和用戶交互。使用HTML,CSS,JavaScript(及框架如React/Vue/Angular)構建頁面,負責數(shù)據(jù)的展示和用戶操作的觸發(fā)。*后端:負責業(yè)務邏輯處理、數(shù)據(jù)校驗、數(shù)據(jù)持久化交互。使用如Java/SpringBoot,Python/Django/Flask等技術棧,提供RESTfulAPI供前端調用,處理請求,執(zhí)行業(yè)務流程,訪問數(shù)據(jù)庫。2.2數(shù)據(jù)庫設計*數(shù)據(jù)庫模型:*用戶表(Users):*`user_id`(INT,PrimaryKey,AutoIncrement):用戶ID。*`username`(VARCHAR(50),Unique,NotNull):用戶名。*`password_hash`(VARCHAR(255),NotNull):密碼哈希。*`email`(VARCHAR(100),Unique,NotNull):郵箱。*`nickname`(VARCHAR(50)):昵稱。*`avatar_url`(VARCHAR(255)):頭像URL。*`role`(ENUM('student','admin'),NotNull):用戶角色。*`created_at`(DATETIME,NotNull):創(chuàng)建時間。*活動表(Activities):*`activity_id`(INT,PrimaryKey,AutoIncrement):活動ID。*`title`(VARCHAR(100),NotNull):活動標題。*`description`(TEXT,NotNull):活動描述。*`organizer_id`(INT,ForeignKeyreferencesUsers(user_id)):主辦方ID。*`location`(VARCHAR(255)):活動地點。*`start_time`(DATETIME,NotNull):開始時間。*`end_time`(DATETIME,NotNull):結束時間。*`limit_participants`(INT,Default0):參與人數(shù)上限(0表示不限)。*`status`(ENUM('draft','open','closed','completed'),NotNull):活動狀態(tài)。*`created_at`(DATETIME,NotNull):創(chuàng)建時間。*報名表(Registrations):*`registration_id`(INT,PrimaryKey,AutoIncrement):報名ID。*`user_id`(INT,ForeignKeyreferencesUsers(user_id),NotNull):報名用戶ID。*`activity_id`(INT,ForeignKeyreferencesActivities(activity_id),NotNull):活動ID。*`registration_time`(DATETIME,NotNull):報名時間。*`check_in_code`(VARCHAR(50)):簽到碼(可選)。*`check_in_status`(ENUM('none','checked','location_based'),Default'none'):簽到狀態(tài)。*`created_at`(DATETIME,NotNull):創(chuàng)建時間。*關系說明:*一個用戶可以報名多個活動(一對多,通過`Registrations`表關聯(lián))。*一個活動可以有多個用戶報名(一對多,通過`Registrations`表關聯(lián))。*一個用戶對應一個角色(通過`Users`表中的`role`字段)。*一個活動對應一個主辦方(多對一,通過`Activities`表中的`organizer_id`字段關聯(lián)到`Users`表的`user_id`)。2.3接口設計*活動詳情查看接口:*URL:`/api/v1/activities/{activityId}`*Method:`GET`*Parameters:*路徑參數(shù):`activityId`(活動ID,INT)*查詢參數(shù):無(或可選`fields=field1,field2`來指定返回字段)*ResponseFormat(JSON):```json{"activityId":1,"title":"示例講座","description":"這是一個示例講座的詳細描述...","organizer":{"userId":101,"nickname":"計算機系"},"location":"二教102","startTime":"2023-10-26T14:00:00Z","endTime":"2023-10-26T15:30:00Z","limitParticipants":50,"currentParticipants":30,"status":"open","createdAt":"2023-10-20T10:00:00Z"}```*Function:根據(jù)提供的活動ID,查詢活動詳情并返回。*活動報名接口:*URL:`/api/v1/activities/{activityId}/register`*Method:`POST`*Parameters:*路徑參數(shù):`activityId`(活動ID,INT)*請求體(JSON):```json{"userId":202,//報名用戶ID"checkInCode":"optional_code"http://可選,如果活動需要}```*ResponseFormat(JSON):```json{"success":true,"message":"報名成功","registrationId":301}```或```json{"success":false,"message":"活動已滿"}```或```json{"success":false,"message":"用戶已報名"}```*Function:使指定用戶報名指定活動,進行人數(shù)檢查和報名記錄創(chuàng)建。3.1實現(xiàn)要求3.1實現(xiàn)要求解析*解析思路:此部分考察編碼實踐能力。選擇一個核心模塊(如活動報名)進行實現(xiàn),需要學生綜合運用前后端技術棧知識。關鍵在于實現(xiàn)業(yè)務邏輯的核心流程,包括接收請求、參數(shù)校驗、與數(shù)據(jù)庫交互(增/改)、處理業(yè)務規(guī)則(如檢查人數(shù)上限、避免重復報名)、返回恰當?shù)捻憫?。單元測試是確保代碼質量的重要手段,需要測試核心邏輯的正確性。代碼規(guī)范體現(xiàn)專業(yè)素養(yǎng)。3.2代碼規(guī)范*解析思路:良好的代碼規(guī)范是代碼可讀、可維護的基礎。命名清晰(變量名、函數(shù)名、類名有實際意義),結構合理(函數(shù)/方法長度適中,單一職責),注釋恰當(解釋復雜邏輯或重要決策),遵循團隊或社區(qū)約定(如PEP8forPython,SpringCodeConvention)。四、測試與驗證4.1測試用例設計*測試用例1:測試成功報名活動。*輸入數(shù)據(jù):活動ID為1,用戶ID為202,有效的報名信息。*預期輸出:HTTP200OK,返回報名成功信息,數(shù)據(jù)庫中新增對應的報名記錄,活動當前報名人數(shù)增加1。*測試用例2:嘗試報名已滿的活動。*輸入數(shù)據(jù):活動ID為1,用戶ID為203,有效的報名信息(假設活動人數(shù)上限為1,且已有用戶報名)。*預期輸出:HTTP200OK(或根據(jù)設計返回特定錯誤碼如4xx),返回報名失敗信息(如“活動已滿”)。*測試用例3:已報名用戶再次報名同一活動。*輸入數(shù)據(jù):活動ID為1,用戶ID為202(假設該用戶已成功報名該活動),有效的報名信息。*預期輸出:HTTP200OK(或返回錯誤信息如“用戶已報名”)。*測試用例4:嘗試使用無效/不存在的活動ID報名。*輸入數(shù)據(jù):活動ID為9999(不存在),用戶ID為204,有效的報名信息。*預期輸出:HTTP404NotFound(或返回錯誤信息)。*測試用例5:報名請求缺少必要參數(shù)(如用戶ID)。*輸入數(shù)據(jù):活動ID為1,請求體缺少`userId`字段。*預期輸出:HTTP400BadRequest,返回錯誤信息提示缺少參數(shù)。4.2測試過程*解析思路:測試設計需要覆蓋正常場景和邊緣/異常場景。測試過程應描述如何執(zhí)行這些用例,例如使用Postman或curl發(fā)送HTTP請求,檢查HTTP響應狀態(tài)碼和返回體內容,驗證數(shù)據(jù)庫中的數(shù)據(jù)變化。驗證過程確保了測試結果的可靠性。五、文檔撰寫文檔內容(模塊:活動報名功能)*模塊名稱:活動報名模塊*模塊功能描述:實現(xiàn)用戶對校園活動的在線報名功能。用戶可以選擇活動并發(fā)送報名請求,系統(tǒng)將記錄報名信息,并進行必要的校驗(如活動人數(shù)上限、重復報名檢查)。成功報名后,用戶將收到確認。*主要接口列表:*接口1:創(chuàng)建報名記錄*URL:`/api/v1/activities/{activityId}/register`*Method:`POST`*Parameters:*路徑參數(shù):`activityId`(INT,活動ID)*請求體:`{"userId":INT,"checkInCode":VARCHAR}`*Response:*成功:`200OK`,Body:`{"success":true,"message":"報名成功","registrationId":INT}`*失敗(活動已滿):`200OK`,Body:`{"success":false,"message":"活動已滿"}`

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論