【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月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
181 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
2天前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
48 23
|
1月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
126 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
97 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
1月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
86 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
6天前
|
Java
课时15:Java运算符(基础数学运算符)
课时15介绍了Java中的基础数学运算符,涵盖加、减、乘、除及自增自减运算。强调了运算符的优先级和使用括号的重要性,并通过范例展示了四则运算与自增自减的具体应用。提醒编写代码时应保持简洁,避免复杂的表达式,确保代码易读性和可维护性。
|
1月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
101 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
7天前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
|
7天前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
|
1月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
67 7

热门文章

最新文章