結對編程隊友個人項目互評

来源:https://www.cnblogs.com/rounding177281/archive/2023/09/20/17717050.html
-Advertisement-
Play Games

2.1、環境搭建 2.1.1、右擊project創建新module 2.1.2、選擇maven 2.1.3、設置module名稱和路徑 2.1.4、module初始狀態 2.1.5、配置打包方式 註意:預設的打包方式為 jar,為了能配置web資源,需要將打包方式設置為 war <packaging ...


一、項目簡介

1.項目名稱:中小學數學卷子自動生成程式

2.項目作者:黨鄭驊霖

3.項目編程語言:Java

 

二、項目分析

1.類圖

 

2.流程圖

3.代碼分析

核心方法解析:

1. `main` 方法:
- 程式的入口點,包含主要的程式邏輯。
- 初始化已有用戶列表,接收用戶輸入,允許用戶登錄,並根據用戶的選擇生成試卷或重新登錄。

2. `InitUser` 方法:
- 用於初始化已有用戶列表,包括創建用戶對象和設置其登錄信息(用戶名、密碼、年級)。
- 返回一個包含已有用戶的列表。

3. `login` 方法:
- 用戶登錄功能,接收用戶輸入的用戶名和密碼,驗證其登錄信息是否與已有用戶匹配。
- 如果匹配成功,將用戶狀態設置為已登錄,返回表示當前登錄用戶的對象。

4. `ChangeNum` 方法:
- 用於用戶登錄後輸入部分,包括改變年級或輸入題數。
- 根據用戶輸入的內容,判斷用戶是否要切換年級或輸入題數,返回相應的值表示用戶的操作。

5. `usedQuestion` 方法:
- 用於記錄之前的題目,以避免重覆生成相同的題目。
- 創建一個HashSet來存儲已生成的題目,並返回該HashSet。

6. `priQuestion` 方法:
- 生成小學數學題目,包括隨機生成數字和運算符,可以包含括弧。
- 返回生成的數學題目字元串。

7. `senQuestion` 方法:
- 生成初中數學題目,包括隨機生成數字、平方、根號和運算符,可以包含括弧。
- 返回生成的數學題目字元串。

8. `highQuestion` 方法:
- 生成高中數學題目,包括隨機生成數字、三角函數和運算符,可以包含括弧。
- 返回生成的數學題目字元串。

9. `producePaper` 方法:
- 生成試卷,根據用戶選擇的年級和題數,調用相應的生成題目方法。
- 避免重覆生成相同的題目,將生成的題目保存到文件中,併在文件名中包含時間戳以確保唯一性。

10. `Teacher` 和 `User` 類:
- `Teacher` 是一個抽象類,定義了抽象方法 `setLogin`、`getName` 和 `getPassword`,用於設置和獲取用戶登錄信息的抽象方法。
- `User` 類繼承自 `Teacher`,實現了抽象方法,具體實現了設置和獲取用戶的用戶名、密碼和年級。

 

優點:

①基於面向對象的思想,使用抽象類繼承,後期代碼更改與擴容都更加容易。

1 abstract class Teacher{
2 abstract void setLogin ( String name, String password, int grade ) ;
3 abstract String getName () ;
4 abstract String getPassword () ;
5 abstract int getGrade () ;
6 }

②代碼結構清晰,不同功能由單獨的方法函數實現,易於閱讀與理解。

1 // 主函數,按步驟進行已有賬戶初始化、登錄、登錄後改變或題數、生成試卷
2 public static void main ( String[] args );
3 // 初始化列表,插入已有賬戶
4 static List<User> InitUser ();
5 // 用戶登錄
6 static User login ( List<User> users );
7 // 登錄後輸入部分,即切換或輸入題數,年級也用數字表示,此處同一個change方便記錄,僅需判斷數值就可以知道進行的是什麼操作
8 static int ChangeNum ( int temp );

③使用哈希表進行查重,查找某個元素的操作通常非常快速。

 1    // 使用哈希表記錄之前的題目
 2   static HashSet<String> usedQuestion ( String name ) {
 3     File file=new File ( "C: \\"+name ) ;  // 直接在C盤創建
 4     HashSet<String> used=new HashSet<String> () ;  // 建立哈希表
 5     file.mkdirs () ;  // 若不存在則創建文件夾(一併創建上級目錄),存在則使用
 6     File[] files=file.listFiles () ;  // 將文件和目錄放在File數組中
 7     for ( File temp: files ) {
 8       if ( !temp.isDirectory ()  )  // 是文件而非文件夾
 9        {
10         try{  // 涉及文件必須try catch
11           BufferedReader br=new BufferedReader ( new FileReader ( temp )  ) ;  // 讀取文件的定義
12           while  ( br.readLine () !=null ) {  // 非空則每次讀入一行數據
13             used.add ( br.readLine ()  ) ; 
14           }
15           br.close () ;  // 涉及讀取文件的要關閉
16         }catch ( Exception e ) {
17           e.printStackTrace () ; 
18         }
19       }
20     }
21     return used;  // 返回記錄已有題目的哈希表
22   }

④代碼依照Google編碼規範編程,可讀性和一致性強,簡化後期團隊合作匹配難度。

 

缺點:

①輸入驗證:雖然程式在一定程度上驗證了用戶的輸入,但出現一些不合法的輸入,例如“切換為xx”時,程式會陷入死迴圈。

②保存路徑:程式中的文件路徑硬編碼為"C:\\",這可能導致在不同操作系統或環境下的問題。應該使用相對路徑或配置文件來管理文件路徑。

 1    // 生成試卷
 2   static void producePaper ( String name, int temp, int num ) {
 3     HashSet<String> used=usedQuestion ( name ) ;  // 獲取之前的題目查重
 4     long now=System.currentTimeMillis () ;  // 獲取出來的是當前時間的毫秒值
 5     Date d=new Date () ; 
 6     d.setTime ( now ) ; 
 7     SimpleDateFormat format=new SimpleDateFormat ( "yyyy-MM-dd-HH-mm-ss" ) ;   
 8     String path="C: \\"+name+"\\"+format.format ( d ) +".txt";  // 文件名
 9     ...
10   }

③查重邏輯:代碼邏輯沒有考慮雙操作數交換律也屬於重覆的題目。

 

4.演示截圖

 

三、總結

  總體來說,這位同學的程式編寫優秀。代碼功能實現完善,邏輯嚴謹,功能被一一清晰,分解命令行界面輸出簡潔易懂,有一定的異常捕獲與修改能力。同時按照Google編碼規範要求代碼,輔以詳細的功能意義註釋,大大保障了代碼的易讀性。如果能修改代碼報錯路徑,將對程式運行環境的要求更加寬容。且若對代碼的測試更加詳細,便可在輸入語境非法時避免落入死迴圈。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設計模式 學習推薦設計模式目錄:22種設計模式 (refactoringguru.cn) 圖說設計模式 — Graphic Design Patterns (design-patterns.readthedocs.io) UML類圖初見 什麼是統一建模語言(UML)? (visual-paradig ...
  • 一、前言 這篇博客是對軟體工程導論的個人項目進行互評,項目要求實現一個簡單的中小學數學卷子自動生成程式。我的搭檔謝先衍同學使用Python完成了項目,而我則是使用java。儘管語言不同增加了一定的閱讀成本,但是接觸到另一種新語言並體會編程者發揮語言特性獨特的心得,確實是拓展了眼界。一個項目,最終歸結 ...
  • KMP演算法是一種高效的字元串匹配演算法,它的核心思想是利用已經匹配成功的子串首碼的信息,避免重覆匹配,從而達到提高匹配效率的目的。KMP演算法的核心是構建模式串的首碼數組Next,Next數組的意義是:當模式串中的某個字元與主串中的某個字元失配時,Next數組記錄了模式串中應該回退到哪個位置,以便繼續匹... ...
  • 上一篇提到過類的屬性,但沒有詳細介紹,本篇詳細介紹一下類的屬性 一 、類的屬性 方法是用來操作數據的,而屬性則是建模必不的內容,而且操作的數據,大多數是屬性,比如游戲中的某個boss類,它的生命值就是屬性(不同級別的boss,有不同的生命值),被攻擊方法(不同的攻擊,傷害值不同),當boss被攻擊時 ...
  • 大家好,我是Antvictor,一個勵志要成為架構師的程式員。 閑話少說,讓我們直接開始安裝Python。 Python安裝 從Python官網找到Download下載對應的安裝包,python3.6及以上即可。 Python官網會根據系統預設展示對應系統的最新版本安裝包,下載成功後點擊安裝。 這裡 ...
  • Python庫解析地址PyParsing 人們普遍認為,Python編程語言的pyparsing 模塊是對文本數據進行操作的一個寶貴工具。 用於解析和修改文本數據的pyparsing 包,簡化了對地址的操作。這是因為該模塊可以轉換和幫助解析地址。 在這篇文章中,我們將討論PyParsing 模塊在處 ...
  • 所有的面試題目都不是一成不變的,面試題目只是給大家一個借鑒作用,最主要的是給自己增加知識的儲備,有備無患。 ...
  • 大家好,我是 Java陳序員,今天給大家介紹一個顏值功能雙線上的 Zookeeper 可視化工具。 項目介紹 PrettyZoo 是一個基於 Apache Curator 和 JavaFX 實現的 Zookeeper 圖形化管理客戶端。 使用了 Java 的模塊化(Jigsaw)技術,並基於 JPa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...