【java】个人项目:中小学数学卷子自动生成程序

简介: 【java】个人项目:中小学数学卷子自动生成程序

用户:

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

功能:

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月26日晚上10点以前提交至创新课程管理系统。提交方式:工程文件打包,压缩包名为“几班+姓名.rar”。迟交2天及以内者扣分,每天扣20%。迟交2天及以上者0分。


附表-1:账户、密码
账户类型 账户 密码 备注
小学 张三1 123
小学 张三2 123
小学 张三3 123
初中 李四1 123
初中 李四2 123
初中 李四3 123
高中 王五1 123
高中 王五2 123
高中 王五3 123

实验源码地址: 中小学生卷子自动生成程序.


第一次个人项目我感觉难度并不是太大,花费了8个小时左右。按照题目的需求,根据用户与系统的交互,分出模块,一步步就能写出来。在过程中,我也基本上没有遇到很难的bug。


这题目是用程序生成算术题,至于软件开发,我第一次想到的就是用java的GUI。毕竟曾经的五子棋,飞机大战也不在话下。


最开始是把登录界面做好。简单的几个部件摆上去就行(采用的是流式布局)。麻烦的在于,部件一般会挤在一起,这时候就要定义空的JLabel来进行填充。使得界面更好看。


JFrame jf = new JFrame();
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(500, 400);
    jf.setTitle("个人项目1_软件1903梁原韶");
    jf.setLocationRelativeTo(null);
    //设置边框布局
    FlowLayout fl = new FlowLayout();
    jf.setLayout(fl);
    //设置登录的组件
    JLabel namejla = new JLabel("账号:");
    namejla.setFont(new Font("楷体", Font.BOLD, 20));
    JLabel pwdjla = new JLabel("密码:");
    pwdjla.setFont(new Font("楷体", Font.BOLD, 20));
    //用户名输入框
    JTextField nameField = new JTextField();
    nameField.setPreferredSize(new Dimension(300, 40));
    nameField.setFont(new Font("楷体", Font.BOLD, 20));
    //密码输入框
    JPasswordField pwdField = new JPasswordField();
    pwdField.setPreferredSize(new Dimension(300, 40));
    //登录注册按钮
    JButton btn1 = new JButton("登录");
    btn1.setFont(new Font("楷体", Font.BOLD, 20));
    btn1.setPreferredSize(new Dimension(80, 40));
    JButton btn2 = new JButton("注册");
    btn2.setFont(new Font("楷体", Font.BOLD, 20));
    btn2.setPreferredSize(new Dimension(80, 40));
    //设置空的文本进行填充,使得流式布局的界面更好看
    JLabel jl1 = new JLabel("       中小学数学卷子自动生成程序");
    jl1.setFont(new Font("楷体", Font.BOLD, 24));
    jl1.setPreferredSize(new Dimension(500, 100));
    JLabel jl2 = new JLabel("");
    jl2.setPreferredSize(new Dimension(50, 40));
    JLabel jl3 = new JLabel("");
    jl3.setPreferredSize(new Dimension(50, 40));
    JLabel jl4 = new JLabel("");
    jl4.setPreferredSize(new Dimension(500, 20));
    //设置监听器,并监听两个按钮
    LoginUIListener listener = new LoginUIListener();
    btn2.addActionListener(listener);
    btn1.addActionListener(listener);
    //将用户名和密码输入框传给监听器,方便取值
    listener.setNameField(nameField);
    listener.setPwdField(pwdField);
    listener.setJf(jf);
    //加上组件
    jf.add(jl1);
    jf.add(namejla);
    jf.add(nameField);
    jf.add(jl2);
    jf.add(jl4);
    jf.add(pwdjla);
    jf.add(pwdField);
    jf.add(jl3);
    jf.add(btn1);
    jf.add(btn2);
    //最后可视化
    jf.setVisible(true);

然后就是。类首先定义User定义张三1,李四2,王五3的那些用户的数据了。因为登录需要进行检测。

public class User
{
  //老师的用户名
  private String name;       
  //老师的密码
  private String password;    
  //老师的类型,"小学","初中","高中"
  private String type;
  //....下面是setter getter方法
  ....
}
有类后,再用 列表模拟整个数据库 。事先构造后所有数据后装入,然后定义一个检查用户名,和密码的函数。判断数据库里面是否有对应的用户存在。

之后点击登录按钮,就能进行判断了。按钮的回调也是毕竟简单的。


之后就是主界面



点击《切换类型按钮》,获取小学老师的JLable,然后修改,为初中。获取初中老师的JLable,修改为高中,获取高中老师的JLable,修改为小学。不断点击就能切换老师要出题目的类型。


在输入框中填入题目数量后,点击《生成题目》后进行判断,-1就退出。不在10到30间就重新输入。符号条件后,就到了比较麻烦的生成卷子的步骤了。


我的出卷思路是:

1,随机生成 1-5个操作数,数目用operand_num接收。(如果是小学题目,则为2-5个操作数)。并用字符串数组来装这几个操作数。(理由下面会讲到)

2,

①小学题目:

操作数之间随机用加+,减-,乘*,除/进行连接。得到一个表达式formula


②初中题目:

因为操作数里面必须有,平方或者开根号。我就随机1-operand_num。个数目,进行特殊操作。50%概率加 ²,50%概率加√。分别加到操作数的后面和前面。

这里有一个问题。如果加了平方,又加了根号怎么办呢?这时候我用了一个标记数组,加了就设为True。这样就不会重复加了


③高中题目:

原理和初中题目类似,不同的是。第一次必须,分别以33%概率加上sin,cos,和tan。之后的剩余0到Randow.next(operand_num)次,再分别以20%概率加上, ²,√sin,cos,tan。(sin,cos,tan,都是加到操作数的的前面)

同样最后也用了标记数组。防止重复进行添加特殊符号。


3,最后就是加括号的问题了。

如果operand_num>=3才加括号。括号包括的元素个数为至少为

2-operand_num-1。因此我先随机出括号的长度。1-perand_num-1。然后随机出,左括号的操作数索引,然后加上括号长度就是右括号操作数的索引。


4,最后加上 “=” ,写入txt文件。


每次只能产生一个表达式,循环几次就产生几个表达式。


张三小学


李四初中


王五高中


实验源码地址: 中小学生卷子自动生成程序.




相关文章
|
1月前
|
Java
java程序导出堆文件
java程序导出堆文件
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
41 0
|
16天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
35 3
|
1月前
|
人工智能 监控 算法
java智慧城管源码 AI视频智能分析 可直接上项目
Java智慧城管源码实现AI视频智能分析,适用于直接部署项目。系统运用互联网、大数据、云计算和AI提升城市管理水平,采用“一级监督、二级指挥、四级联动”模式。功能涵盖AI智能检测(如占道广告、垃圾处理等)、执法办案、视频分析、统计分析及队伍管理等多个模块,利用深度学习优化城市管理自动化和智能化,提供决策支持。
223 4
java智慧城管源码 AI视频智能分析 可直接上项目
|
3天前
|
搜索推荐 前端开发 Java
java医院绩效考核管理系统项目源码
系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
6 0
|
4天前
|
Java
网页运行java程序cheerpj
网页运行java程序cheerpj
30 0
|
4天前
|
前端开发 Java 测试技术
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
Java从入门到精通:4.1.1参与实际项目,锻炼编程与问题解决能力
|
17天前
|
JavaScript Java 测试技术
基于Java的数学竞赛网站的设计与实现(源码+lw+部署文档+讲解等)
基于Java的数学竞赛网站的设计与实现(源码+lw+部署文档+讲解等)
20 0
|
18天前
|
监控 数据可视化 安全
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
环境实时数据、动态监测报警,实时监控施工环境状态,有针对性地预防施工过程中的环境污染问题,打造文明生态施工,创造绿色的生态环境。
14 0
智慧工地SaaS可视化平台源码,PC端+APP端,支持二开,项目使用,微服务+Java++vue+mysql
|
19天前
|
SQL Java Go
java项目超市购物管理系统
java项目超市购物管理系统