中小学生试卷自动生成程序--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的代码之后,再反思一下我自己写的,发现自己写的一些东西其实是有些多余的,命令提示也可以做的更友好一些,整个工程的耦合程度也可以进一步降低。
中小学生试卷自动生成程序--jialin大佬代码分析的更多相关文章
- ExtJS6的中sencha cmd中自动创建案例项目代码分析
在之前的博文中,我们按照sencha cmd的指点,在自己win7虚拟机上创建了一个案例项目,相当于创建了一个固定格式的文档目录结构,然后里面自动创建了一系列js代码.这是使用sencha cmd自动 ...
- 中小学数学卷子自动生成程序--对G同学的代码分析
前几天,在课程要求下完成了个人项目的项目工程编写,即一个中小学数学卷子自动生成程序. 程序主要功能是用户预设账户登录后可以选择等级进行对应的小中高的数学卷子对应出题生成txt文本. 本文针对partn ...
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- Demo005 小学四则运算自动生成程序
目录 小学四则运算自动生成程序 0.传送门 1.题目要求 2.功能实现 2.1 总体设计 2.2 用户欢迎界面 2.3 用户功能界面 2.4 屏幕输出 2.5 文本输出 2.6 获取时间 2.7 用户 ...
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
- STM32启动代码分析 IAR 比较好
stm32启动代码分析 (2012-06-12 09:43:31) 转载▼ 最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)
这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...
- JavaBean 基础概念、使用实例及代码分析
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...
随机推荐
- (七十九)c#Winform自定义控件-导航菜单
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- 夯实Java基础系列22:一文读懂Java序列化和反序列化
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- docker部署运行ES
拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.2.0 //官方 注意,后面要加上需要的版本号,具体支持的镜像版本查看 ...
- Golang的反射reflect深入理解和示例
编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...
- js 判断对象是否为空
利用JSON.stringify var objData = {};JSON.stringify(objData) ==="{}" // true 第二种用原声js 方法 Obje ...
- navicat for mysql ;连接数据库报错1251,解决办法。
转载 改密码方式:用管理员身份打开cmd mysql -uroot -p(输入密码) 进入mysql执行下面三个命令 use mysql: ALTER USER 'root'@' ...
- 想转行做3D游戏模型,如何快速入行
随着技术和硬件迭代,3D建模,广泛运用在游戏,影视,动画,VR等领域,而且就业面非常广. 由于3D美术设计师薪资和前景确实都不错,很多同学想进入这个行业,从事相关工作,但是没有一个整体的学习思路和规划 ...
- 终端 10X 工作法(一)
目录 1. Terminal 2. Grep 3. Sed 4. Awk 5. Xargs 6. Find 在 github 上面有一个 700 多人 star 的 repo 叫做 Bash-Onel ...
- 利用pyecharts将数据可视化
可视化展示在数据分析领域中是一个至关重要的点,好的可视化展示对我们的结果分析有更好的支持作用. 一.问题 在数据分析的时代里面我们需要将数据的可视化展现出来,更加方便用户的观察.如下图 有些时候我们需 ...
- Centos 7.2天兔(Lepus 3.8)数据库监控系统部署
天兔(Lepus 3.8)数据库监控系统部署 转载自:https://blog.csdn.net/m0_38039437/article/details/79613260 一.安装LAMP基础环境 首 ...