结对编程-中小学试卷生成程序-Mr.布朗熊的代码分析

在仔细研读并测试了该范涵同学的代码后,我认为该同学的个人项目实现了要求的所有功能

 

题目:个人项目——中小学数学卷子自动生成程序

用户:

小学、初中和高中数学老师。

功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

 

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

 

3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);

 

4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

6、个人项目9月17日早上8点以前提交至各自负责的助教处。提交方式:工程文件打包,压缩包名为“几班+姓名.rar”。

 

个人项目流程图:

 

范涵同学的代码中有几项亮点:

1、逻辑结构脉络清晰,函数精悍,命名规范,代码可读性强

2、模块分工很明确:初始菜单、二级登陆菜单,出题菜单。出题函数(小学、初中、高中)。

3、交互设计做的很棒。我觉得这点是我真心做的不足的地方,他的程序考虑到输入输出的麻烦,用序号来代替输入的内容。而且菜单切换富有人性化,而我的程序仔细一看真是漏洞百出

 

不足之处也比较明显,在于查重的地方:

 Java Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

 

static boolean itIsExist(String accountType,String name,String question) {
        File folder = new File("考试试卷\\"+name+"\\"+accountType);
        String all = "";
        File files[] = folder.listFiles();
        for(File f : files) {
            InputStream in = null;
            try {
                in = new FileInputStream(f);
            } catch (FileNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            byte content[] = new byte[1024];
            try {
                in.read(content);
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            try {
                in.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(question) == -1) 
        {
            return false;
        }
        else 
        {
            return true;
        }

可以发现他在查重的时候是选择每次添加新题目的时候都把当前所有文件都读取,来与当前生成的题目匹配判断是否重复。

逐一比较的方式,由于每生成一道题就要进行一次查重,当题量过多时该方法会成为性能瓶颈

推荐查重的时候可以生成一个总的题库,在总题库内比对。

或是选择在一开始时生成题库,在已经绝对不会重复的题库中随机取题目。

再比如用HashSet,查询速度达到O(1)。

细细打磨一番必然会更加有效率

 

程序测试:

欢迎登陆界面:

 

 

出题选择界面:

 

 

交互:

 

 

目录:

 

 

题目:

 

 

综上:在仔细研读并测试了该范涵同学的代码后,我认为该同学的个人项目实现了要求的所有功能

posted @ 2019-09-19 17:03  无名の狩人  阅读(468)  评论(1编辑  收藏  举报