中小学数学卷子自动生成程序--对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 自动导入包 快捷方式 关闭重复代码提示
随机推荐
- ARP攻击的发现、攻击原理、攻击方式、防护,竟然这么简单?!
ARP协议概述 ARP协议(address resolution protocol)地址解析协议. 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址, ...
- tp5.0使用JWT完成token认证技术
1.安装 composer require firebase/php-jwt 2.封装(在框架根目录extend下新建Token.php) 复制代码 <?php use Firebase\JWT ...
- PhpStrom 常用的插件
.env files support 可以在env函数使用是提示.env文件中所有的key值的自动完成功能 Markdown support 在编写.md文件时有预览的功能 PHP composer. ...
- 一比一还原axios源码(五)—— 拦截器
上一篇,我们扩展了Axios,构建了一个Axios类,然后通过这个Axios工厂类,创建真正的axios实例.那么今天,我们来实现下Axios的拦截器也就是interceptors.我们来简单看下Ax ...
- 为什么Arrays.asList() 不能使用其修改方法(阿里开发手册里明确说明)
Arrays.asList()方法把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException(),我们来 ...
- Anaconda Navigator卡logo打不开闪退问题处理方案-更换阿里云镜像源
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 一.打开软件卡logo,点击图标后闪退 最近有同事使用anaconda时出现了卡logo,显示loading applications,点击图标时发 ...
- 初学者都能学会的ElasticSearch入门实战
大家好,我是咔咔 不期速成,日拱一卒 项目中准备使用ElasticSearch,之前只是对ElasticSearch有过简单的了解没有系统的学习,本系列文章将从基础的学习再到深入的使用. 咔咔之前写了 ...
- .Net core Api后台获取数据,异步方法中,数据需采用Linq分页
.net core api using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressi ...
- windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量
一.windows配置各种环境变量后 path 路径下的目录: 二.windows 配置各种环境变量的目的: 为windows系统添加上各种环境对应的命令 举例,为什么要添加jdk的bin目录,是因为 ...
- 最新出炉的Java面试题(2022亲身经历)
面试题清单 个人近来面试了不少的公司的,该挂的挂,该应付通过的应付通过,目前对面试题部分做一个系统的总结.最起码要保证被问过的问题第二次被问到的时候是可以回答并且理解的.算是一个被动输入学习的过程. ...