中小学生试卷自动生成程序--jialin大佬代码分析

结对编程代码评价

有幸和小jialin结对编程。拿到jialin的代码后。

我先是尝试用idea运行。结果报了如下错误。

无法加载主类,再尝试用eclipse运行。


好的,可以运行,那为什么用idea跑不了呢?

度娘了一下,发现是环境变量设置的问题。

接下来步入正题,开始看代码。

打开工程,发现在只有一个class文件,头大,这样的架构肯定不够好。一个一个函数看下来吧。

第一个函数是 CheckNameAndPassword(),用于检测账号密码是否正确

boolean CheckNameAndPassword(User []user,User indata) {        for(int i=0;i<9;i++) {            if(indata.name.equals(user[i].name) && indata.password.equals(user[i].password)) {                indata.grade=user[i].grade;                return true;            }        }        return false;       }

可以看出来jialin大佬这里是把用户写死了的,先产生了满足需求的9个User,这样写的好处是执行的效率比较高,缺点是添加用户比较麻烦,要对代码进行改动。
接下来是TestDemo,小jialin把所有的逻辑都写在了这里面。看第一段我发现了一个代码风格上的问题。代码如下:

if(xx!=0) indata=Login();grade=ChooseGrade(indata);xx=PaperProduce(indata.name,grade);

在符号如“=”两边最好空格一下,这样代码看起来会更清晰。改后的如下:

if(xx != 0) indata = Login();grade = ChooseGrade(indata);xx = PaperProduce(indata.name, grade);

改了之后是不是好看了一点点,继续往下看。
接下来分别是选择出题难度,保存试卷,产生试卷,产生题目,判断是否重复的函数。
重点看一下查重函数itemIsExist()

static boolean itemIsExist(String problem, String username,String grade) {        String file_path= "papers\\"+username+"\\"+grade;        File folder = new File(file_path);        String all = "";        File files[] = folder.listFiles();        for(File f : files) {            InputStream is = null;            try {                is = new FileInputStream(f);            } catch (FileNotFoundException e) {                // TODO 自动生成的 catch 块                e.printStackTrace();            }            byte content[] = new byte[1024];            try {                is.read(content);            } catch (IOException e) {                // TODO 自动生成的 catch 块                e.printStackTrace();            }            try {                is.close();            } catch (IOException e) {                // TODO 自动生成的 catch 块                e.printStackTrace();            }            try {                all += new String((content),"utf-8");            } catch (UnsupportedEncodingException e) {                // TODO 自动生成的 catch 块                e.printStackTrace();            }        }        if(all.indexOf(problem) == -1) {            return false;        }else {            return true;        }    }

可以看到每次查重都要去读文件。将已经产生的题目全部读出,再一一对比。每次读文件都会使用比较多的资源,我觉得可以把产生的题目先存入字符串组,新产生题目与字符串组内题目对比,若重复则重新产生一道,最后将整字符串组写入,这样可以减少读写文件带来的消耗。
  jialin大佬的产生题目的逻辑写得很好,可以随机的产生符合需求的各种形式的题目,还可以给题目加上括号。同时防止了不合理括号产生。

接下来实际运行体验一下。

基本满足需求,试卷也成功产生了。接下来输入一些奇怪的东西测试一下程序的稳定性。

发现了一点不稳定的地方,当要求输入试卷数量时如果没有输入数字,随意输入一个字符串,程序就会终止。这是因为在该逻辑中使用了Scanne输入的nextInt(),当输入非整数时,会抛出类型不匹配的异常,可以在这里进行一下异常处理,当输入不为整数的时候要求重新输入。

总结

总体来看,jialin大佬代码很好的完成了题目的各项需求,只是在代码风格上还有一些地方可以提高,整个工程的架构也可以做的更好,一个class写到底的方式调试的时候实在是太不友善了,jialin大佬凭着清晰的逻辑能力完成了工程,但是我看起来的时候就有点头疼了。看了jialin的代码之后,再反思一下我自己写的,发现自己写的一些东西其实是有些多余的,命令提示也可以做的更友好一些,整个工程的耦合程度也可以进一步降低。

原文地址:https://www.cnblogs.com/Hnufsh/p/11549981.html

时间: 2024-11-09 06:25:13

中小学生试卷自动生成程序--jialin大佬代码分析的相关文章

结对编程——基于JAVA开发的中小学生数学试卷自动生成程序

这两个星期,我和马同学一起参与了基于个人项目的中小学生数学试卷的自动生成程序结对编程项目.结对编程的实现是基于个人编程的,不过由于我是用c++而同伴是用的PYTHON商量之后我们决定用JAVA从头开始写.原本打算使用mvc框架来完成这个项目,但是由于对其使用不够熟悉,最后还是没怎么能用上. 这次项目我负责的是前端部分,前端部分做起来还是挺麻烦的,我们使用的是java来完成这个项目,对于UI界面我们使用了jframe来编写,在项目过程中遇到几个很莫名奇妙的bug,原本是用阿里云短信服务返回的验证码

对Quin同学的试卷自动生成程序代码分析

我的partner Quin同学使用Python语言编写的中小学试卷生成系统,在此我对他的劳动成果进行一个简单分析. 项目需求: 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学.初中和高中三个选项中的一个.否则提示“请输入正确的用户名.密码”,重新输入用户名.密码: 2.登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录

中小学数学试卷自动生成程序-对张凯翔同学代码的评价

张凯翔的优点: 面向对象编程,结构清晰,修改难度小 生成了UI界面,清晰美观 相比张惟盛的代码生成的题目更加科学,比如会在平方和开方的部分增加括号,以确保意义明确 相较于C语言,采用了更加方便的Java,调用函数以及捕获异常,确保了程度的稳定性 张凯旋的缺点: 代码习惯有点问题,杂乱且缺少注释 虽然采用了全随机生成运算符的方式,但在某些算式中也会出现无意义的括号,比如在正常的加减乘除中,第一个为乘法,已经是优先的但是还是会添加无意义的括号,有瑕疵 缺少了对同一老师的不同试卷进行题目查重的步骤,虽

你不知道的常用 代码分析 规范

visual studio有个功能,代码分析,一般开发完毕后,除了处理常规的“错误列表”显示的“错误”和“警告”,我们更加应该注意的是,运行代码分析功能,规范我们的代码,因为不好的编码习惯,在没有人指出和没有团队氛围的开发中,很多时候都是一路不规范到底 visual studio菜单的“分析”->“对***运行代码分析”或者在解决方案的类库右击选择代码分析如果为了强迫自己养成良好的c#微软规范的习惯,我们可以右击类库属性,找到最后一行标签“代码分析”,并在对应右侧明细的“规则集”->"

恶意代码分析技巧-汇总

资料:云众可信 恶意代码分析技巧[恶意代码分析技巧]01- 介绍[恶意代码分析技巧]02-exe_python[恶意代码分析技巧]03-java[恶意代码分析技巧]04-exe_VB[恶意代码分析技巧]05-exe_Delphi[恶意代码分析技巧]06-exe_.net[恶意代码分析技巧]07-exe_自动安装[恶意代码分析技巧]08-文档宏病毒[恶意代码分析技巧]09-文档漏洞[恶意代码分析技巧]10-脚本[恶意代码分析技巧]11-其他 原文地址:https://www.cnblogs.com

中小学数学卷子自动生成程序-结对编程之队友代码分析

一.编程语言:C++ 二.代码解读与分析: 1. 项目逻辑 通过输入信息与数组中存储账户信息比对完成用户登录.根据不同的类型要求生成相应类型的试卷并查重.将生成题目以指定的形式存放在指定文件夹下.过程中可切换试卷类型. 2.函数功能说明 int main():主函数负责调用各个功能函数,将各个功能模块按照项目实际的使用情况与应用逻辑结合适当的提示性信息进行组织和套用. void SetPrimary(int n):生成小学类型的试卷. void SetMiddle(int n):生成初中类型的试

个人项目:中小学数学卷子自动生成程序-队友代码测评

结对编程-队友代码分析 上一周,我们完成了个人项目编程.在经过对队友代码的分析,我感触颇深,觉得非常有必要来写一篇文章分析一下队友的代码,我是用的java,而队友用的c++,以下开始正文! ------------------------------------------------------------------------------- 项目需求简述: 个人项目:中小学数学卷子自动生成程序 用户: 小学.初中和高中数学老师. 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序

中小学数学卷子自动生成程序分析

结对编程对方个人项目分析 个人项目:中小学数学卷子自动生成程序 用户:小学.初中和高中数学老师. 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学.初中和高中三个选项中的一个.否则提示“请输入正确的用户名.密码”,重新输入用户名.密码: 2.登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学.初中和高中三

EF自动生成的模型edmx代码分析

edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部门表),一个用户必须属于一个分公司,因此用户表有一外键关联到分公司表.数据(实体)模型如图1. 图1  数据模型 2. 整体结构 以文本方式打开.edmx文件,可以看到这是一个xml文件,根结点下包括2部分内容,如图2所示. 图2  整个文档由2大部分组成 图2中,第一部分为<edmx:Runtim