其他分享
首页 > 其他分享> > 个人项目分析

个人项目分析

作者:互联网

个人项目要求:

用户:

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

功能:

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

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

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

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

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

代码分析:

生成试卷的方法

  1 public static void Create(int a, int level) {     //产生整张卷子
  2         String paper = "";
  3         System.out.println("请输入10~30的整数来生成题目或-1退出登录或0进行难度选择");
  4         Scanner in = new Scanner(System.in);
  5         String num = in.next();
  6         if (num.equals("0")) {              //进入难度选择
  7             ChangeLevel();
  8         } else {
  9             if (num.equals("-1")) {           //退出登录
 10                 System.out.println("您已退出当前用户");
 11                 int change = ValidUser();
 12                 Login(change);
 13             } else {
 14                 int test1 = 0;
 15                 try {
 16                     test1 = Integer.parseInt(num);   //输入的字符串如果可以转化为int
 17                 } catch (Exception e) {
 18                 }
 19                 if (test1 >= 10 && test1 <= 30) {
 20                     int nu = Integer.parseInt(num);
 21                     if (a > 0 && a < 4) {
 22                         //创建文件夹
 23                         Date date = new Date();
 24                         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
 25                         String time = dateFormat.format(date);  //获得当前时间
 26                         File file = new File("src/张三" + Integer.toString(a));
 27                         String str2 = "张三" + Integer.toString(a);
 28                         if (file.mkdirs())  //判断是否已经生成文件夹
 29                         {
 30                             System.out.println("成功创建文件夹" + str2);
 31                         } else {
 32                             System.out.println("文件夹" + str2 + "已存在,将继续存放在该文件夹中");
 33                         }
 34                         String pro = "";
 35                         for (int i = 0; i < nu; i++) {   //根据当前难度选择出题
 36                             if (level == 1) {
 37                                 pro = GenerateProblem.CreateAPri(i);
 38                             } else {
 39                                 if (level == 2) {
 40                                     pro = GenerateProblem.CreateAMid(i);
 41                                 } else {
 42                                     pro = GenerateProblem.CreateAHig(i);
 43                                 }
 44                             }
 45                             boolean FindFlag = true;
 46                             String[] FilesName = file.list();
 47                             for (String str : FilesName) {      //对于题目进行查重
 48                                 try {
 49                                     FileReader fileReader = new FileReader("src/" + str2 + "/" + str);
 50                                     BufferedReader bufferedReader = new BufferedReader(fileReader);
 51                                     String ComStr1 = "";
 52                                     String ComStr2 = "";
 53                                     ComStr1 = bufferedReader.readLine();
 54                                     ComStr2 = pro.substring(3);
 55                                     if (ComStr1.substring(3).equals(ComStr2)) {
 56                                         FindFlag = false;
 57                                     }
 58                                     bufferedReader.close();
 59                                     fileReader.close();
 60                                 } catch (IOException e) {
 61                                     e.printStackTrace();
 62                                 }
 63                                 if (FindFlag == false) {
 64                                     break;
 65                                 }
 66                             }
 67                             if (FindFlag == true) {
 68                                 paper = paper + pro + '\n' + '\n';
 69                             } else {
 70                                 i--;
 71                             }
 72                         }
 73                         try {                      //生成文件
 74                             FileWriter fileWriter = new FileWriter("src/" + str2 + "/" + time + ".txt");
 75                             fileWriter.write(paper);
 76                             fileWriter.close();
 77                             System.out.println("成功生成试卷!");
 78                         } catch (IOException e) {
 79                             e.printStackTrace();
 80                         }
 81                     }
 82 
 83                     if (a > 3 && a < 7) {
 84                         //创建文件夹
 85                         Date date = new Date();
 86                         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
 87                         String time = dateFormat.format(date);  //获得当前时间
 88                         File file = new File("src/李四" + Integer.toString(a - 3));
 89                         file.mkdir();
 90                         String str2 = "李四" + Integer.toString(a - 3);
 91                         if (file.mkdirs()) {
 92                             System.out.println("成功创建文件夹" + str2);
 93                         } else {
 94                             System.out.println("文件夹" + str2 + "已存在,将继续存放在该文件夹中");
 95                         }
 96                         String pro = "";
 97                         for (int i = 0; i < nu; i++) {
 98                             if (level == 1) {
 99                                 pro = GenerateProblem.CreateAPri(i);
100                             } else {
101                                 if (level == 2) {
102                                     pro = GenerateProblem.CreateAMid(i);
103                                 } else {
104                                     pro = GenerateProblem.CreateAHig(i);
105                                 }
106                             }
107                             boolean FindFlag = true;
108                             String FilesName[] = file.list();
109                             for (String str : FilesName) {
110                                 try {
111                                     FileReader fileReader = new FileReader("src/" + str2 + "/" + str);
112                                     BufferedReader bufferedReader = new BufferedReader(fileReader);
113                                     String ComStr1 = "";
114                                     String ComStr2 = "";
115                                     ComStr1 = bufferedReader.readLine();
116                                     ComStr2 = pro.substring(3);
117                                     if (ComStr1.substring(3).equals(ComStr2)) {
118                                         FindFlag = false;
119                                     }
120                                     bufferedReader.close();
121                                     fileReader.close();
122                                 } catch (IOException e) {
123                                     e.printStackTrace();
124                                 }
125                                 if (FindFlag == false) {
126                                     break;
127                                 }
128                             }
129                             if (FindFlag == true) {
130                                 paper = paper + pro + '\n' + '\n';
131                             } else {
132                                 i--;
133                             }
134                         }
135                         try {
136                             FileWriter fileWriter = new FileWriter("src/" + str2 + "/" + time + ".txt");
137                             fileWriter.write(paper);
138                             fileWriter.close();
139                             System.out.println("成功生成试卷!");
140                         } catch (IOException e) {
141                             e.printStackTrace();
142                         }
143                     }
144 
145                     if (a > 6 && a < 10) {
146                         //创建文件夹
147                         Date date = new Date();
148                         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss");
149                         String time = dateFormat.format(date);  //获得当前时间
150                         File file = new File("src/王五" + Integer.toString(a - 6));
151                         file.mkdir();
152                         String str2 = "王五" + Integer.toString(a - 6);
153                         if (file.mkdirs()) {
154                             System.out.println("成功创建文件夹" + str2);
155                         } else {
156                             System.out.println("文件夹" + str2 + "已存在,将继续存放在该文件夹中");
157                         }
158                         String pro = "";
159                         for (int i = 0; i < nu; i++) {
160                             if (level == 1) {
161                                 pro = GenerateProblem.CreateAPri(i);
162                             } else {
163                                 if (level == 2) {
164                                     pro = GenerateProblem.CreateAMid(i);
165                                 } else {
166                                     pro = GenerateProblem.CreateAHig(i);
167                                 }
168                             }
169                             boolean FindFlag = true;
170                             String FilesName[] = file.list();
171                             for (String str : FilesName) {
172                                 try {
173                                     FileReader fileReader = new FileReader("src/" + str2 + "/" + str);
174                                     BufferedReader bufferedReader = new BufferedReader(fileReader);
175                                     String ComStr1 = "";
176                                     String ComStr2 = "";
177                                     ComStr1 = bufferedReader.readLine();
178                                     ComStr2 = pro.substring(3);
179                                     if (ComStr1.substring(3).equals(ComStr2)) {
180                                         FindFlag = false;
181                                     }
182                                     bufferedReader.close();
183                                     fileReader.close();
184                                 } catch (IOException e) {
185                                     e.printStackTrace();
186                                 }
187                                 if (FindFlag == false) {
188                                     break;
189                                 }
190                             }
191                             if (FindFlag == true) {
192                                 paper = paper + pro + '\n' + '\n';
193                             } else {
194                                 i--;
195                             }
196                         }
197                         try {
198                             FileWriter fileWriter = new FileWriter("src/" + str2 + "/" + time + ".txt");
199                             fileWriter.write(paper);
200                             fileWriter.close();
201                             System.out.println("成功生成试卷!");
202                         } catch (IOException e) {
203                             e.printStackTrace();
204                         }
205                     }
206                 } else {
207                     Create(a, level);    //重新进入Create函数
208                 }
209             }
210         }
211     }

改变难度的函数:

 1  public static void ChangeLevel() {     //改变难度的函数
 2         System.out.println("现在进行难度选择,输入格式为:切换为XX(小学,初中,高中)");
 3         Scanner input = new Scanner(System.in);
 4         String str = input.nextLine();
 5         if (str.equals("切换为小学")) {
 6             level = 1;
 7             System.out.println("准备生成小学题目,请输入题目数量");
 8             Create(ID, level);
 9         } else {
10             if (str.equals("切换为初中")) {
11                 level = 2;
12                 System.out.println("准备生成初中题目,请输入题目数量");
13                 Create(ID, level);
14             } else {
15                 if (str.equals("切换为高中")) {
16                     level = 3;
17                     System.out.println("准备生成高中题目,请输入题目数量");
18                     Create(ID, level);
19                 } else {
20                     System.out.println("请输入小学、初中和高中三个选项中的一个");
21                     ChangeLevel();
22                 }
23             }
24         }
25     }

登陆界面函数:

 1 public static void Login(int a) {     //登录界面
 2         if (a == 1 || a == 2 || a == 3) {
 3             level = 1;
 4             ID = a;
 5             System.out.println("恭喜您!登陆成功!");
 6             System.out.println("当前选择为小学出题");
 7             System.out.println("准备生成小学数学题目,请输入生成题目数量,题目数量的有效范围为[10.30],(输入-1将退出当前用户,重新登录)(输入0将进入难度选择界面)");
 8             Create(a, level);
 9         }
10         if (a == 4 || a == 5 || a == 6) {
11             level = 2;
12             ID = a;
13             System.out.println("恭喜您!登陆成功!");
14             System.out.println("当前选择为初中出题");
15             System.out.println("准备生成初中数学题目,请输入生成题目数量,题目数量的有效范围为[10.30],(输入-1将退出当前用户,重新登录)(输入0将进入难度选择界面)");
16             Create(a, level);
17         }
18         if (a == 7 || a == 8 || a == 9) {
19             level = 3;
20             ID = a;
21             System.out.println("恭喜您!登陆成功!");
22             System.out.println("当前选择为高中出题");
23             System.out.println("准备生成高中数学题目,请输入生成题目数量,题目数量的有效范围为[10.30],(输入-1将退出当前用户,重新登录)(输入0将进入难度选择界面)");
24             Create(a, level);
25         }
26     }

 

优点:
1、代码模块结构清晰
李牧宇同学将整个工程总体分为三个类:用户类、题目类和试卷类,实现了用户的数据保存模块,出对应小学/初中/高中难度题目的业务模块,以及生成的整张试卷的核心模块。在每个模块中对各个方法进行封装实现功能。
2、变量命名清晰规范,较好的遵循了编码规则。代码旁的注释简单明了,方便阅读,代码可读性高。
3、文件路径使用相对路径。文件路径具有相对路径和绝对路径两种形式,而绝对路径可能会使得程序的可重用性差,使得在别的终端上不能运行,而在程序中使用相对路径则会变的有极强的适应性,提高了代码健壮性。
4、交互性好
每一步的提示语都清楚明了,让用户即使输错了也会有相应的提示语句,不用担心输错而使程序终止
5、题目类核心逻辑清晰,设计巧妙。题目采用了数值与符号分离的方法来生成题目。先生成随机的操作数和具体的数值,之后以随机的通用符号连接数值。对于初高中的特有字符,选择将例如三角函数等特殊字符与数值绑定,存于数值所在的string数组中。在最后,通过逻辑加上括号运算。代码简单,逻辑清晰。

缺点:
1. UI界面并未单独成为一类,而是在主类试卷类中,高内聚低耦合,可能为后续的修改或迭代增加负担,需要重新编译,同时代码安全性可能得不到保障。
2、一次输出信息较多,但没有对输出的界面内容进行美化处理,例如加边框或居中等,可以采用文件流的方式美化UI
3、账号采用的是直接String[]存储,这就导致如果需要添加用户则需要修改代码,不利于交互与拓宽用户,可以使用数据库进行处理。

总结:
1、队友代码使用了许多静态方法,可以直接被主函数调用,节省空间提高了效率。同时,通过Java语言和自己的设计,在代码的可读性和可维护性还是不错的,但也有一些小问题,例如代码规范上需要再好好学习一下,以及在做设计上进行深度思考。总的来说,虽然本次我们两人选择的代码语言并不一样,但是在互相看代码的过程中,我们彼此都触发了新的思路,新的想法,同时也收获很多,期待结对项目的合作。

标签:题目,String,个人,level,System,项目分析,println,out
来源: https://www.cnblogs.com/eieieiei/p/16692619.html