首页 > 编程语言 >结对编程队友个人项目互评

结对编程队友个人项目互评

时间:2023-09-20 13:14:06浏览次数:34  
标签:结对 题目 String 登录 用户 生成 互评 队友 输入

一、项目简介

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编码规范要求代码,辅以详细的功能意义注释,大大保障了代码的易读性。如果能修改代码报错路径,将对程序运行环境的要求更加宽容。且若对代码的测试更加详细,便可在输入语境非法时避免落入死循环。

 

标签:结对,题目,String,登录,用户,生成,互评,队友,输入
From: https://www.cnblogs.com/rounding177281/p/17717050.html

相关文章

  • 软件工程导论个人项目互评
    本博客记录湖南大学2021级软件工程导论个人项目互评与代码分析成员:评价人:软件5班高义林项目作者:软件5班谢宇鑫需求:命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,X......
  • 【HNU个人项目互评】--java
    湖南大学软件工程个人项目互评评测者:李姝萱项目作者:张乐盈 一.基本信息:  1.被评队友满足了个人项目要求的所有需求  1.1.登录:只有规定的账户可以登陆,其他的输入不会因为异常抛出强制终止程序 输入不满足格式要求,不会越界异常错误账户不能登陆登陆成功,清晰......
  • 中小学数学卷子自动生成程序——结对编程队友互评
    结对编程队友互评代码:软件2105何志成评价:软件2105陈相彤一、题目介绍用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为......
  • HNU个人项目互评博客
    HNU个人项目——中小学数学卷子自动生成程序一.前言本次个人项目中我的搭档袁秀广同学使用了Java进行开发。袁秀广同学的代码实现了自动生成题目的基本功能,注解详细,内容丰富,但在一些细节上也存在一些可优化的地方。二.需求分析1、命令行输入用户名和密码,两者之间用空格隔开(程......
  • 【结对编程互评-C++】中小学数学卷子自动生成程序
    【结对编程互评-C++】中小学数学卷子自动生成程序项目名称:中小学数学卷子自动生成程序编程语言:C++代码作者:李义评价人:张恒硕目录[1.项目要求][1.1目标用户][1.2实现功能][2.代码分析][3.功能测试][3.1登录功能测试][3.2出题功能测试][4.优缺点分析与总结]......
  • 个人项目互评
    结队编程,分析结队队友的代码能够让小组队员之间更加了解彼此的风格。指出队友的优缺点,既能两个人互相提醒改进,也可以在往后的结队编程项目达到更好的效果。后续我将分析队友方缘的C++代码的功能及性能。基本功能实现基本要求:用户:小学、初中和高中数学老师。功能:1、命令行输......
  • 个人项目互评-中小学数学试卷生成
    个人项目互评-中小学数学试卷生成队友:软件2104李锦华队友语言选择:Python题目要求个人项目:中小学数学卷子自动生成程序用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正......
  • 结对项目队友个人项目互评
    一、概述1.项目名称:中小学数学卷子自动生成程序2.编程语言:Python3.目标:分析结对编程队友的个人项目代码,分析其代码的优缺点 二、整体架构1.代码整体基于面向对象的思想,根据功能分为了数量相对较多的类,其类图如下:  根据类图可以总结其思路为:Account作为账户类......
  • HNU个人项目互评——中小学数学卷子自动生成程序
    HNU个人项目互评——中小学数学卷子自动生成程序代码作者:刘蕴哲评价人:李锦华一、个人项目需求1.用户小学、初中和高中数学老师。2.功能(1)命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显......
  • 中小学数学卷子自动生成程序-个人项目互评
    前言:首先,很有幸能有这样一次和队友互相学习的机会。正好我们两个人都是选择的C++,通过对比分析对方的代码,学习到了很多,也深刻认识到了自己的不足,还有很长的路要走。程序结构:队友的代码用了一个cpp文件便包含了所有代码,这稍微有点不好,如果能够将各个功能函数各自放在头文件,就能让......