中小学数学卷子自动生成程序--对G同学的代码分析
前几天,在课程要求下完成了个人项目的项目工程编写,即一个中小学数学卷子自动生成程序。
程序主要功能是用户预设账户登录后可以选择等级进行对应的小中高的数学卷子对应出题生成txt文本。
本文针对partner G 的工程进行分析,讲解这个项目的一些过程得失。
据需求分析,项目难点在于
1.文件流的使用,包括文件夹的生成,试卷txt的生成
2.随机出题已经保证出的题目不会重复
3.题目的数学逻辑严谨性
优点:
- 文件路径使用相对路径。文件路径具有相对路径和绝对路径两种形式,而绝对路径可能会使得程序的可重用性差,使得在别的终端上不能运行,而在程序中使用相对路径则会变的有极强的适应性,包括 ./ 为当前路径,../为上一级目录的使用都是能提高代码健壮性的。
- 在使用文件流IO时使用try catch捕捉异常。IO输入容易产生错误,因为可能会有文件路径出错,文件找不到等运行时错误,在编译i阶段是找不出这些问题的,因此一个try catch 的异常捕捉是十分有必要且严谨的。
- 题目查重。每次出卷子时产生的题目会对文件夹中该老师出现过的题目进行查重,会将该题目与文件夹中其他试卷,包括当前出题卷进行比对,若相同,这该题不会输出到卷子上。较为完善的题目查重设置,使用了File类中的list()方法,list()方法是返回某个目录下的所有文件和目录的文件名,返回的是String数组。
- java语言熟练掌握。能够清晰的使用static静态变量,使用文件流的File类和BufferrdWriter类,以及文件输入的InputStreamReader类和BufferedReader类等。
However, it is a pity that it has its pluses and minuses
缺点:
- 没有太多体现java的oop思想。Object-oriented programming,面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,而不是将程序看作一系列函数的集合。本项目中并未过多的体现面向对象的独立对象之间的调用,而是单纯的一些面向过程的编程,只是函数调用的集合。
- 有些地方可以考虑优化。比如代码逻辑复杂的地方糅杂在一块,不够清晰,可考虑再多分成几个小函数,提高代码易读性。增加判断文件夹是否建立,若文件夹不存在则程序会创建,可以减少前期工作。
个人项目:中小学数学卷子自动生成程序
这份需求的项目编写,让我再次使用了久违的c++头文件与实现分开封装的形式编程,对以前知识的一个回顾。而和partner G 探讨不同的程序逻辑之间的优劣性,和不同编程语言实现这个项目的难易程度,同时也再次熟悉起当初只是入门的java语言,受益匪浅。
中小学数学卷子自动生成程序--对G同学的代码分析的更多相关文章
- HNU_中小学数学卷子自动生成程序(个人项目)简要分析
一.前言 首先,在这里特别感谢我的结对编程伙伴HnuLyx,他在算法上和设计思路上都与我有很大的不同,个人项目互评中,为我的项目提出了很多很好的建议,让我在认清自己不足的同时,了解到很多以前没有注意的 ...
- Demo005 小学四则运算自动生成程序
目录 小学四则运算自动生成程序 0.传送门 1.题目要求 2.功能实现 2.1 总体设计 2.2 用户欢迎界面 2.3 用户功能界面 2.4 屏幕输出 2.5 文本输出 2.6 获取时间 2.7 用户 ...
- 13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 Pod 水平自动扩缩 Pod 水平自动扩缩工作原理 Pod 水平自动 ...
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)
[Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络) 地址:http://www.eoeandroid.com/thre ...
- 分享下使用 svn,测试服务器代码自动更新、线上服务器代码手动更新的配置经验
分享下使用 svn,测试服务器代码自动更新.线上服务器代码手动更新的配置经验 利用SVN的POST-COMMIT钩子自动部署代码 Linux SVN 命令详解 Linux SVN 命令详解2 使用sv ...
- Idea_学习_06_IntelliJ IDEA 自动导入包 快捷方式 关闭重复代码提示
二.参考资料 1.IntelliJ IDEA 自动导入包 快捷方式 关闭重复代码提示
随机推荐
- laravel7 搜索之when()函数实现搜索
当做搜索功能时,我们经常会遇到这样的情况,需要判断搜索词是否为空,为空则不执行模糊查询条件,反之需要执行模糊查询条件.这样很繁琐,其实laravel给我们提供了一个友好的函数,辅助我们很快完成这样任务 ...
- spring源码干货分享-对象创建详细解析(set注入和初始化)
记录并分享一下本人学习spring源码的过程,有什么问题或者补充会持续更新.欢迎大家指正! 环境: spring5.X + idea 建议:学习过程中要开着源码一步一步过 Spring根据BeanDe ...
- CF877F题解
题目大意 有一个序列,每个位置上有 \(1\) 或 \(2\) 两种元素若干,每次询问一个区间,求这个区间有多少个子区间满足 \(1\) 类元素恰好比 \(2\) 类元素多 \(k\) 个. 莫队 要 ...
- Android 12(S) 图形显示系统 - BufferQueue的工作流程(十)
题外话 疫情隔离在家,周末还在努力学习的我 ..... 一.前言 上一篇文章中,有基本讲清楚Producer一端的处理逻辑,最后也留下了一个疑问: Consumer是什么时候来消费数据的?他是自己主 ...
- SpringMVC工作流程 --通透较详细
SpringMVC工作流程 SpringMVC工作流程 流程说明(重要): (1)客户端发送一个http请求给前端控制器(DispatcherServlet): (2)前端控制器(DispacherS ...
- Blazor 002 : 一种开历史倒车的UI描述语言 -- Razor
Razor是一门相当怪异丑陋的标记语言,但在实际使用中却十分高效灵活.本文主要介绍了Razor是什么,以及Razor引擎的一些浅薄的背后机理. 写文章前我本想一口气把Razor的基本语法,以及Blaz ...
- vue&uniapp环境搭建以及项目创建(webstorm)
以下是针对webstorm用户上手uniapp框架的学习 vue环境搭建以及配置(脚手架搭建) 首先要明确三样东西 npm:node.js的包管理器 webpack:主要用途是通过CommonJS 的 ...
- Java的重载以及与重写的区别
一.什么是方法重载 方法的重载就是在同一个类中,有着若干个名字相同的方法.在具体调用这些方法的时候,通过传递参数的不同来调用这些重载方法. 二.为什么需要方法重载 方法名的定义需要做到见名知意,功能类 ...
- leetcode210.拓扑排序
拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...
- python 常用内置函数简介
1.作用域相关内置函数globals()--获取全局变量的字典locals()--获取执行本方法所在命名空间内的局部变量的字典 2.和调用相关callable(o),o是参数,看这个变量是不是可调用. ...