cdwjiofw

结对编程-个人项目互评

一.简介

  本篇博客的主要内容是对我的结对编程搭档雷同学的代码评价和分析,在此过程中与自己的代码对比,对于发现的诸多不同和问题,在这里进行分析和总结。雷同学使用的编程语言是java,代码功能齐全,运行流畅,符合规范。在异常处理等方面要比我的代码好很多,希望我可以多多学习他的优点,完善自身。(最后附上代码)

二.优缺点分析

    优点:在登录方面,他是将用户登录注册和存储与后面的程序运行分为两个文件,这样提升了代码的整洁度,相比之下,我是用的是python的if判断,需要判断不止一次,比较麻烦。在生成题目方面,雷同学的方法是吧生成操作符的函数单独写,而我的是生成随机数和随机符号都在生成题目一个函数里面,他的优点在于在结对编程项目中由于需要判断答题的对错,所以使用它这种方法,可以更便捷的生成答案(我的是全部转成字符串进行拼接,在计算方面会很麻烦)

    缺点:雷同学的缺点就是代码量太大,原因在于他的题目生成函数,我们有九个用户,他有九个题目生成函数,这样显得冗长。我的建议是可以小学、初中、高中各写一个函数用来生成题目,由于需要保存到相应用户文件夹,我们可以吧用户名作为一个参数传进函数,根据用户名指定路径保存文件。

三.总结

  通过对雷同学的代码分析,比较了我们各自的优缺点,都对自己和对方代码有了更深的认识和理解,为之后的结对项目打下基础,希望我们的结对项目可以做的更好。

四.源码

package score;

import java.util.Scanner;

public class user { // 申请注册用户
    Scanner scan = new Scanner(System.in);

    private String username; // 用户名
    private String password; // 密码

    public String GetUserame() { // 获取用户名
        return username;
    }

    public String GetPassword() { // 获取密码
        return password;
    }

    public void SetUsername(String str) { // 创建用户名
        this.username = str;
    }

    public void SetPassword(String str) { // 设置密码
        this.password = str;
    }

    public boolean CompareObject(user teacher) // 比较两个用户是否用户名和密码均相同
    {
        if (teacher.GetUserame().equals(username) && teacher.GetPassword().equals(password)) {
            return true;
        } else {
            return false;
        }
    }
    // public boolean CompareObject(String name, String psss) {
    // if (name.equals(username)) {
    // if (psss.equals(password)) {
    // return true;
    // }
    // }
    // return false;
    // }
}
View Code
package score;

import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.util.Random;

public class App {
    public static void main(String[] args) throws Exception {
        user[] user1 = new user[3]; // 提前定义三个小学老师用户名和密码
        user[] user2 = new user[3]; // 提前定义三个初中老师用户名和密码
        user[] user3 = new user[3]; // 提前定义三个高中老师用户名和密码
        user1[0] = new user();
        user1[1] = new user();
        user1[2] = new user();
        user2[0] = new user();
        user2[1] = new user();
        user2[2] = new user();
        user3[0] = new user();
        user3[1] = new user();
        user3[2] = new user();
        user1[0].SetUsername("张三1");
        user1[0].SetPassword("123");
        user1[1].SetUsername("张三2");
        user1[1].SetPassword("123");
        user1[2].SetUsername("张三3");
        user1[2].SetPassword("123");
        user2[0].SetUsername("李四1");
        user2[0].SetPassword("123");
        user2[1].SetUsername("李四2");
        user2[1].SetPassword("123");
        user2[2].SetUsername("李四3");
        user2[2].SetPassword("123");
        user3[0].SetUsername("王五1");
        user3[0].SetPassword("123");
        user3[1].SetUsername("王五2");
        user3[1].SetPassword("123");
        user3[2].SetUsername("王五3");
        user3[2].SetPassword("123");
        System.out.println("请输入用户名和密码(用户名和密码之间请用一个空格隔开)"); // 开始登录系统
        Scanner scan = new Scanner(System.in);
        while (true) {
            user User = new user();         // 创建一个临时对象
            String name = scan.next();      // 输入的用户名
            User.SetUsername(name);
            String Password = scan.next(); // 输入的密码
            User.SetPassword(Password);
            boolean flag = false;
            for (int i = 0; i < 3; i++) {
                if (User.CompareObject(user1[i])){ // 如果用户名是小学老师,则进入选择哪位小学老师,调用不同函数
                    flag = true;
                    switch (i) {
                        case 0:
                            ChoosePrimary1();
                            break;
                        case 1:
                            ChoosePrimary2();
                            break;
                        case 2:
                            ChoosePrimary3();
                            break;
                    }
                } else if (User.CompareObject(user2[i])) // 如果用户名是初中老师,则进入选择哪位小学老师,调用不同函数
                {
                    flag = true;
                    switch (i) {
                        case 0:
                            ChooseMiddle1();
                            break;
                        case 1:
                            ChooseMiddle2();
                            break;
                        case 2:
                            ChooseMiddle3();
                            break;
                    }
                } else if (User.CompareObject(user3[i])) // 如果用户名是高中老师,则进入选择哪位小学老师,调用不同函数
                {
                    flag = true;
                    switch (i) {
                        case 0:
                            ChooseHigh1();
                            break;
                        case 1:
                            ChooseHigh2();
                            break;
                        case 2:
                            ChooseHigh3();
                            break;
                    }
                }
            }
            if (flag == true) // 如果用户名和密码均正确则不再次输入
            {
                break;
            } else // 如果用户名和密码错误,则重新输入
            {
                System.out.println("请输入正确的用户名、密码");
            }
        }
        scan.close();
    }

    // 张三1
    public static void ChoosePrimary1() {
        // 登录界面+出题数量
        System.out.println("当前选择为小学出题");
        System.out.println("准备生成小学数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        // 输入-1则退出系统
        if (num == -1) {
            System.out.println("您已退出登录");
        }
        // 输入数字超出有效范围重新输入
        else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChoosePrimary1();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\张三1");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹张三1");
            } else {
                System.out.println("文件夹张三1已存在");
            }
            // 出题
            String[] primaryQuestion = new String[num];
            System.out.println("正在出题,请稍候");
            for (int i = 0; i < num; i++) {
                String question = CreatePrimaryQuestion(i); // 随机生成一道题目
                // 查重
                boolean flagFind = true; // 查找标记

                String[] files = file.list(); // 返回文件夹下所有文件名
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\张三1\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;

                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) //
                            {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                if (flagFind == true) {
                    primaryQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 将确认不重复的题目写入文件中
            try {
                FileWriter writer = new FileWriter(".\\张三1\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(primaryQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 命令提示+切换难度功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }

        }
        input.close();
    }

    public static void ChoosePrimary2() // 张三2
    {
        // 初始登录界面+题目数量
        System.out.println("当前选择为小学出题");
        System.out.println("准备生成小学数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChoosePrimary2();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\张三2");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹张三2");
            } else {
                System.out.println("文件夹张三2已存在");
            }
            // 出题
            String[] primaryQuestion = new String[num];
            System.out.println("正在出题,请稍候");
            for (int i = 0; i < num; i++) {
                String question = CreatePrimaryQuestion(i); // 出一道题
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) // 查重
                {
                    try {
                        FileReader fr = new FileReader(".\\张三2\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        // 按行读取字符串
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                if (flagFind == true) {
                    primaryQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 将已确认不重复的题目写入文件
            try {
                FileWriter writer = new FileWriter(".\\张三2\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(primaryQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }

        }
        input.close();
    }

    // 张三3
    public static void ChoosePrimary3() { // 登录界面+出题数量
        System.out.println("当前选择为小学出题");
        System.out.println("准备生成小学数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChoosePrimary3();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\张三3");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹张三3");
            } else {
                System.out.println("文件夹张三3已存在");
            }
            // 出题
            String[] primaryQuestion = new String[num];
            System.out.println("正在出题,请稍候");
            for (int i = 0; i < num; i++) {
                String question = CreatePrimaryQuestion(i);
                // 查重
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\张三3\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                if (flagFind == true) {
                    primaryQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 已确认不重复的题目写入文件
            try {
                FileWriter writer = new FileWriter(".\\张三3\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(primaryQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }

        }
        input.close();
    }

    // 李四1
    public static void ChooseMiddle1() {
        // 登录界面+出题数量
        System.out.println("当前选择为初中出题");
        System.out.println("准备生成初中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChooseMiddle1();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\李四1");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹李四1");
            } else {
                System.out.println("文件夹李四1已存在");
            }
            // 出题
            System.out.println("正在出题,请稍候");
            String[] middleQuestion = new String[num];
            for (int i = 0; i < num; i++) {
                String question = CreateMiddleQuestion(i);
                // 查重
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\李四1\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                // 不重复的题目组
                if (flagFind == true) {
                    middleQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 不重复的题目组写入文件
            try {
                FileWriter writer = new FileWriter(".\\李四1\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(middleQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }

        }
        input.close();
    }

    // 李四2
    public static void ChooseMiddle2() {
        // 登录界面+题目数量
        System.out.println("当前选择为初中出题");
        System.out.println("准备生成初中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChooseMiddle2();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\李四2");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹李四2");
            } else {
                System.out.println("文件夹李四2已存在");
            }
            System.out.println("正在出题,请稍候");
            String[] middleQuestion = new String[num];
            for (int i = 0; i < num; i++) {
                String question = CreateMiddleQuestion(i);
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\李四2\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        // 按行读取字符串
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                // 确认不重复的题目组
                if (flagFind == true) {
                    middleQuestion[i] = question;
                } else {
                    i--;
                }
                // 不重复的题目组写入文件
            }
            try {
                FileWriter writer = new FileWriter(".\\李四2\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(middleQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 难度切换+退出功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }
        }
        input.close();
    }

    // 李四3
    public static void ChooseMiddle3() {
        // 登录界面+出题数量
        System.out.println("当前选择为初中出题");
        System.out.println("准备生成初中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChooseMiddle3();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\李四3");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹李四3");
            } else {
                System.out.println("文件夹李四3已存在");
            }
            // 出题
            System.out.println("正在出题,请稍候");
            String[] middleQuestion = new String[num];
            for (int i = 0; i < num; i++) {
                String question = CreateMiddleQuestion(i);
                // 查重
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\李四3\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        // 按行读取字符串
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                // 不重复的题目组
                if (flagFind == true) {
                    middleQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 不重复的题目组写入文件
            try {
                FileWriter writer = new FileWriter(".\\李四3\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(middleQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }
        }
        input.close();
    }

    // 王五1
    public static void ChooseHigh1() {
        // 登录界面+出题数量
        System.out.println("当前选择为高中出题");
        System.out.println("准备生成高中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChooseHigh1();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\王五1");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹王五1");
            } else {
                System.out.println("文件夹王五1已存在");
            }
            // 出题
            String[] highQuestion = new String[num];
            System.out.println("正在出题,请稍候");
            for (int i = 0; i < num; i++) {
                String question = CreateHighQuestion(i);
                // 查重,重复则重新生成一个随机题目
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\王五1\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        // 按行读取字符串
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                // 不重复的题目组
                if (flagFind == true) {
                    highQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 不重复的题目组写入文件
            try {
                FileWriter writer = new FileWriter(".\\王五1\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(highQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }
        }
        input.close();
    }

    // 王五2
    public static void ChooseHigh2() {
        // 登录界面+出题数量
        System.out.println("当前选择为高中出题");
        System.out.println("准备生成高中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChooseHigh2();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\王五2");
            if (file.mkdirs()){
                System.out.println("成功创建文件夹王五2");
            } else {
                System.out.println("文件夹王五2已存在");
            }
            // 出题
            String[] highQuestion = new String[num];
            System.out.println("正在出题,请稍候");
            for (int i = 0; i < num; i++) {
                String question = CreateHighQuestion(i);
                // 查重
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\王五2\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        // 按行读取字符串
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                // 不重复的题目组
                if (flagFind == true) {
                    highQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 不重复的题目组写入文件中
            try {
                FileWriter writer = new FileWriter(".\\王五2\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(highQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出功能
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }
        }
        input.close();
    }

    // 王五3
    public static void ChooseHigh3() {
        // 登录界面+出题数量
        System.out.println("当前选择为高中出题");
        System.out.println("准备生成高中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        if (num == -1) {
            System.out.println("您已退出登录");
        } else if (num < 10 || num > 30) {
            System.out.println("请输入正确的题目数量[10,30]或者-1");
            ChooseHigh3();
        } else {
            // 创建文件夹
            String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
            File file = new File(".\\王五3");
            if (file.mkdirs()) {
                System.out.println("成功创建文件夹王五3");
            } else {
                System.out.println("文件夹王五3已存在");
            }
            // 出题
            String[] highQuestion = new String[num];
            System.out.println("正在出题,请稍候");
            for (int i = 0; i < num; i++) {
                String question = CreateHighQuestion(i);
                // 查重,重复则重新随机生成一道题目
                boolean flagFind = true;
                String[] files = file.list();
                for (String f : files) {
                    try {
                        FileReader fr = new FileReader(".\\王五3\\" + f);
                        BufferedReader bf = new BufferedReader(fr);
                        String str, tempString;
                        // 按行读取字符串
                        while ((str = bf.readLine()) != null) {
                            if (str.length() > 3) {
                                tempString = str.substring(3);
                            } else {
                                tempString = str;
                            }
                            if (tempString.equals(question)) {
                                flagFind = false;
                                break;
                            }
                        }
                        bf.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (flagFind == false) {
                        break;
                    }
                }
                // 不重复的题目组
                if (flagFind == true) {
                    highQuestion[i] = question;
                } else {
                    i--;
                }
            }
            // 不重复的题目组写入文件
            try {
                FileWriter writer = new FileWriter(".\\王五3\\" + time + ".txt");
                for (int tem = 0; tem < num; tem++) {
                    writer.write(highQuestion[tem]);
                    writer.write("\n");
                    writer.write("\n");
                }
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 切换难度+退出登录
            System.out.println("题目已出完,存放在文件" + time + ".txt中");
            System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
            String chooice = input.next();
            if (chooice.equals("-1")) {
                System.out.println("您已退出登录");
            } else {
                Exchange(chooice);
            }
        }
        input.close();
    }

    // 切换难度函数,参数为选择的用户编号
    // 进入函数后,先正确输入“切换为XX”,然后进入切换难度后的用户编号1-3
    public static void Exchange(String chooice) {
        Scanner scan = new Scanner(System.in);
        String primary = "切换为小学";
        String middle = "切换为初中";
        String high = "切换为高中";
        if (chooice.equals(primary)) {
            System.out.println("请选择生成的小学题目记录到哪个用户名的文件夹下,请输入一位数字:  1-张三1  2-张三2  3-张三3");
            int chooseName = scan.nextInt();
            switch (chooseName) {
                case 1:
                    ChoosePrimary1();
                    break;
                case 2:
                    ChoosePrimary2();
                    break;
                case 3:
                    ChoosePrimary3();
                    break;
            }
        } else if (chooice.equals(middle)) {
            System.out.println("请选择生成的初中题目记录到哪个用户名的文件夹下,请输入一位数字:  1-李四1  2-李四2  3-李四");
            int chooseName = scan.nextInt();
            switch (chooseName) {
                case 1:
                    ChooseMiddle1();
                    break;
                case 2:
                    ChooseMiddle2();
                    break;
                case 3:
                    ChooseMiddle3();
                    break;
            }
        } else if (chooice.equals(high)) {
            System.out.println("请选择生成的高中题目记录到哪个用户名的文件夹下,请输入一位数字:  1-王五1  2-王五2  3-王五3");
            int chooseName = scan.nextInt();
            switch (chooseName) {
                case 1:
                    ChooseHigh1();
                    break;
                case 2:
                    ChooseHigh2();
                    break;
                case 3:
                    ChooseHigh3();
                    break;
            }
        } else {
            System.out.println("请输入小学、初中和高中三个选项中的一个");
            String Chooice = scan.next();
            Exchange(Chooice);
        }
        scan.close();
    }

    // 运算符选择函数,将传入参数对应的符号返回
    public static String Sign(int signNum) {
        String str = " ";
        switch (signNum) {
            case 0:
                str = "+";
                break;
            case 1:
                str = "-";
                break;
            case 2:
                str = "*";
                break;
            case 3:
                str = "/";
                break;
            case 4:
                str = "^2";
                break;
            case 5:
                str = "√";
                break;
            case 6:
                str = "(";
                break;
            case 7:
                str = ")";
                break;
            case 8:
                str = "sin";
                break;
            case 9:
                str = "cos";
                break;
            case 10:
                str = "tan";
                break;
        }
        return str;
    }

    // 出一道小学题目
    public static String CreatePrimaryQuestion(int i) {
        Random rand = new Random();
        String question = i + 1 + "、";
        if (i <= 8) {
            question = question + " ";
        }
        int flag1 = 0; // 前括号数量
        int temp1 = rand.nextInt(11) + 0; // 在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
        if (temp1 == 6) // 生成的是前括号,则前括号数加1
        {
            question = question + Sign(temp1);
            flag1++;
        }
        temp1 = rand.nextInt(100) + 1; // 生成第一个操作数
        question = question + temp1;
        temp1 = rand.nextInt(11) + 0; // 在第一个操作数之后生成一个符号,是括号则根据条件判断是否写入
        if (temp1 == 7 && flag1 != 0) {
            question = question + Sign(temp1);
            flag1--;
        }
        int signNum = rand.nextInt(4) + 1; // 随机生成本题的运算符数量
        for (int j = 0; j < signNum; j++) {
            temp1 = rand.nextInt(4) + 0; // 随机生成+ - * /
            question = question + Sign(temp1);
            temp1 = rand.nextInt(11) + 0; // 在操作数之前先生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 6) {
                question = question + Sign(temp1);
                flag1++;
            }
            temp1 = rand.nextInt(100) + 1; // 随机生成操作数[1,100]
            question = question + temp1;
            temp1 = rand.nextInt(11) + 0; // 在操作数之后生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 7 && flag1 != 0) {
                question = question + Sign(temp1);
                flag1--;
            }
        }
        for (int t = 0; t < flag1; t++) // 补全缺少的后括号
        {
            question = question + Sign(7);
        }
        question = question + "=";
        return question;
    }

    // 出一道初中题,参数是题目的编号
    public static String CreateMiddleQuestion(int for_i) {
        Random rand = new Random();
        int flag1 = 0; // 前括号数量
        String question = for_i + 1 + "、";
        if (for_i <= 8) {
            question = question + " ";
        }
        int temp1 = rand.nextInt(11) + 0; // 在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
        if (temp1 == 6) {
            question = question + Sign(temp1);
            flag1++;
        }
        temp1 = rand.nextInt(100) + 1; // 生成第一个操作数
        question = question + temp1;
        temp1 = rand.nextInt(11) + 0; // 在第一个操作数之后生成一个符号,是括号则根据条件判断是否写入
        if (temp1 == 7 && flag1 != 0) {
            question = question + Sign(temp1);
            flag1--;
        }
        int signNum = rand.nextInt(4) + 1; // 随机生成符号的数量[1,4]
        int flagPlace = rand.nextInt(signNum) + 0; // 选择平方或者根号的位置
        int flagSign = rand.nextInt(2) + 4; // 选择平方或者根号
        for (int j = 0; j < signNum; j++) {
            temp1 = rand.nextInt(4) + 0; // 随机生成+ - * /
            question = question + Sign(temp1);
            temp1 = rand.nextInt(11) + 0; // 在操作数之前先生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 6) {
                question = question + Sign(temp1);
                flag1++;
            }
            if (j == flagPlace && flagSign == 5) // 如果是根号写在操作数前,符号后
            {
                question = question + Sign(5);
            }
            temp1 = rand.nextInt(100) + 1; // 随机生成操作数[1,100]
            question = question + temp1;
            if (j == flagPlace && flagSign == 4) {
                question = question + Sign(4); // 如果是平方写在操作数后
            }
            temp1 = rand.nextInt(11) + 0; // 在操作数之后生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 7 && flag1 != 0) {
                question = question + Sign(temp1);
                flag1--;
            }
        }
        for (int t = 0; t < flag1; t++) // 补全后括号
        {
            question = question + Sign(7);
        }
        question = question + "=";
        return question;
    }

    // 随机生成一道高中题目
    public static String CreateHighQuestion(int for_i) {
        Random rand = new Random();
        int flag1 = 0; // 前括号数量
        String question = for_i + 1 + "、";
        if (for_i <= 8) {
            question = question + " ";
        }
        int temp1 = rand.nextInt(11) + 0; // 在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
        if (temp1 == 6) {
            question = question + Sign(temp1);
            flag1++;
        }
        temp1 = rand.nextInt(11) + 0; // 在第一个操作数之前先生成一个符号,是sin cos tan则根据条件判断是否写入
        if (temp1 == 5 || temp1 == 8 || temp1 == 9 || temp1 == 10) {
            question = question + Sign(temp1);
        }
        temp1 = rand.nextInt(100) + 1; // 生成第一个操作数
        question = question + temp1;
        temp1 = rand.nextInt(11) + 0; // 在第一个操作数之前先生成一个符号,是平方则根据条件判断是否写入
        if (temp1 == 4) {
            question = question + Sign(temp1);
        }
        temp1 = rand.nextInt(11) + 0; // 在第一个操作数之后生成一个符号,是括号则根据条件判断是否写入
        if (temp1 == 7 && flag1 != 0) {
            question = question + Sign(temp1);
            flag1--;
        }
        int signNum = rand.nextInt(4) + 1; // 随机生成符号的数量[1,4]
        int flagPlace = rand.nextInt(signNum) + 0; // 选择sin cos tan的位置
        int flagSign = rand.nextInt(3) + 8; // 选择sin cos tan
        for (int j = 0; j < signNum; j++) {
            temp1 = rand.nextInt(4) + 0; // 随机生成+ - * /
            question = question + Sign(temp1);
            temp1 = rand.nextInt(11) + 0; // 在操作数之前先生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 6) {
                question = question + Sign(temp1);
                flag1++;
            }
            if (j == flagPlace) // sin cos tan 的位置
            {
                question = question + Sign(flagSign);
            }
            if (j != flagPlace) {
                temp1 = rand.nextInt(11) + 0;
                if (temp1 == 5 || temp1 == 8 || temp1 == 9 || temp1 == 10) {
                    question = question + Sign(temp1);
                }
            }
            temp1 = rand.nextInt(100) + 1; // 随机生成操作数[1,100]
            question = question + temp1;
            temp1 = rand.nextInt(11) + 0; // 在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 4) // 生成了平方则写入
            {
                question = question + Sign(temp1);
            }
            temp1 = rand.nextInt(11) + 0; // 在操作数之后生成一个符号,是括号则根据条件判断是否写入
            if (temp1 == 7 && flag1 != 0) {
                question = question + Sign(temp1);
                flag1--;
            }
        }
        for (int t = 0; t < flag1; t++) {
            question = question + Sign(7);
        }
        question = question + "=";
        return question;
    }
}
View Code

 

posted on 2021-09-28 15:30  Golden-Snitch  阅读(51)  评论(0编辑  收藏  举报

导航