| 四则运算 |
实际花费时间 |
估计花费时间 |
|
计划 |
10 |
6 |
|
明确需求和其他相关因素,估计每个阶段的时间成本 |
10 |
6 |
|
开发 |
82 |
88 |
|
8 |
10 |
|
5 |
6 |
|
5 |
6 |
|
3 |
3 |
|
12 |
12 |
|
32 |
21 |
|
5 |
9 |
|
12 |
21 |
|
报告 |
8 |
6 |
|
3 |
2 |
|
2 |
1 |
|
3 |
3 |
1.随机产生一组(10个)算数题,产生算式,产生+/-,验证,除去不够减,循环产生。
2.在界面显示出题目,结果文本框,计时器,以及开始重置提交功能
3.显示对错,正确值统计,统计时间。
作为一名一年级小学生的家长,我希望制作一个出题软件,完成100以内的正整数的加减法题随机产生。以便减轻我的家庭负担。
注意大小写,注意缩进,括号一定要配对,注意要分行。
系统开始,随机产生10道加法或者减法,计算完成后,统计做了多少道题,正确率,以及用了多少时间,系统结束。
6.具体编码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.List;
//StudentTopic
//主窗口
public class StudentTopic extends JFrame{
public static int firstnum,secondnum,sign;//第一个数,第二个数,sign:0-1:0="+";1="-"
public static String c = null;//运算符,+ -
public static JPanel Result;//计算面板
public JPanel Buttonpanel;//按钮及结果面板
public static JButton Resetbutton;//重置按钮
public static JButton Printfbutton;//打印按钮
public static JButton Startbutton;//开始按钮
public static JLabel CountLable;//正确率在标签显示
public static JLabel sumtimeLable;//时间显示
public static List<Integer>/*Integer*/ Resultlist = new ArrayList<>();//文本框结果的集合
public static List<JLabel> Topiclist = new ArrayList<>();//(标签)集合,题目在标签显示
public static List<JTextField> Textlist = new ArrayList<>();//文本框集合
public static List<Integer> Correctlist = new ArrayList<>();//正确答案集合
public static int j=0;
public static int k=0;
public static int i=0;
public static int num ;//设置用户答对的题数
public static long sum1,sum2,sum3;//存放开始时间,结束时间;sum3=sum1-sum2
public StudentTopic(){
//初始化按钮
Resetbutton = new JButton("重置");
Printfbutton = new JButton("提交");
Startbutton = new JButton("开始");
//设置按钮大小
Resetbutton.setSize(50,100);
Printfbutton.setSize(50,100);
Startbutton.setSize(50,100);
sumtimeLable = new JLabel(" ");
sumtimeLable.setPreferredSize(new Dimension(100, 100));
sumtimeLable.setFont(new Font("楷体",Font.BOLD, 15));
sumtimeLable.setText("耗时:");
//初始化计数面板
Result = new JPanel();
Result.setLayout(new GridLayout(25, 4));
//初始化按钮面板
Buttonpanel = new JPanel();
Buttonpanel.setLayout(new FlowLayout());
Buttonpanel.setSize(600,80);
Buttonpanel.setBorder(BorderFactory.createLineBorder(Color.GREEN));
Buttonpanel.add(Startbutton);
CountLable = new JLabel(" ");
CountLable.setFont(new Font("楷体",Font.BOLD, 15));
CountLable.setPreferredSize(new Dimension(100,20));
CountLable.setText("正确率:");
//将按钮添加至按钮及结果面板中
Buttonpanel.add(Resetbutton);
Buttonpanel.add(Printfbutton);
Buttonpanel.add(CountLable);
Buttonpanel.add(sumtimeLable);
//为计数面板添加标签和文本框
//设置窗体属性
setLayout(new BorderLayout());
setBounds(100,100,600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = getContentPane();
//将计数面板,按钮面板放置在容器中指定位置
container.add(Result, BorderLayout.NORTH);
container.add(Buttonpanel,BorderLayout.SOUTH);
}
//设置Result面板中的组件
public static void Result(){
for(i=0;i<10;i++){
JLabel label = new JLabel();
//在设置布局的条件下,调用setPreferredSize(new Dimension(80, 20))可以设置标签的大小
//不能调用setsize()方法
label.setPreferredSize(new Dimension(80, 20));
label.setFont(new Font("楷体",Font.BOLD, 20));
label.setBorder(BorderFactory.createLineBorder(Color.GREEN));//设置标签的边框
Topiclist.add(label);// Topiclist为题目(标签)集合,题目在标签中呈现
JTextField textField = new JTextField(4);
textField.enable(false);
Textlist.add(textField);//Textlist为用户输入计算结果的文本框集合
}
for(i = 0;i<20;i++){//利用if-else语句来间隔输出标签和文本框
if(i%2 == 0){//如果余数为0,则添加标签
Result.add( Topiclist.get(j));
j++;
}else{//如果余数为1,则添加文本框
Result.add(Textlist.get(k));
k++;
}
}
CreateRandom();//调用创建随机题目的方法CreateRandom();
myAddActionLIstener();//调用按钮的动作监听方法myAddActionLIstener()
}
//随机创建算术题
public static void CreateRandom(){
//int a,b,cint;
//String c = null;
Random random = new Random();
for(JLabel lable: Topiclist){// Topiclist为题目(标签)集合,题目在标签中呈现
firstnum = random.nextInt(101);
secondnum = random.nextInt(101);
sign = random.nextInt(2);
String d = "=";
switch (sign) {
case 0:
c = "+";
RandomRange();//创建规定算数题范围函数,即和不大于100,差不小于0
lable.setText(firstnum+c+secondnum+d);
Correctlist.add(firstnum+secondnum);//Correctlist为所有题目正确答案的集合
break;
default:
c = "-";
RandomRange();//创建规定算数题范围函数,即和不大于100,差不小于0
lable.setText(firstnum+c+secondnum+d);
Correctlist.add(firstnum-secondnum);//Correctlist为所有题目正确答案的集合
break;
}
}
}
public static void RandomRange(){//创建规定算数题范围函数,即和不大于100,差不小于0
Random r = new Random();
switch (c) {
case "+":
while(firstnum+secondnum>100){
firstnum = r.nextInt(101);
secondnum = r.nextInt(101);
if(firstnum + secondnum <= 100){
}
}
break;
default:
while(firstnum-secondnum<0){
firstnum = r.nextInt(101);
secondnum = r.nextInt(101);
if(firstnum - secondnum >= 0){
break;
}
}
break;
}
}
//为按钮添加动作监听方法
public static void myAddActionLIstener() {
//为重置按钮添加动作监听
Resetbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for(JTextField cleartextField : Textlist){
cleartextField.setText("");
}
for(int i=0;i<Topiclist.size();i++) {
Topiclist.get(i).setText("");
Topiclist.get(i).setBorder(BorderFactory.createLineBorder(Color.GREEN));
}
Correctlist.removeAll(Correctlist);
Resultlist.removeAll(Resultlist);
CountLable.setText("正确率:");
CreateRandom();
}
});
//为提交按钮添加监听
Printfbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Integer i;
Double result1;
num = 0;
//获取用户在文本框中输入的计算结果
for(i = 0;i<Textlist.size();i++){//Textlist为用户输入计算结果的文本框集合
if("".equals(Textlist.get(i).getText())) {
Textlist.get(i).setText("-1");;
}
Resultlist.add(Integer.parseInt(Textlist.get(i).getText()));
}
//计算用户做对的题目个数
//System.out.println(Correctlist.get(0)+"============"+Resultlist.get(0));
for(i = 0;i<Resultlist.size();i++){
if(Correctlist.size()==0) {
break;
}
if(Resultlist.get(i)==Correctlist.get(i)){
num++;
}else{//Correctlist为所有题目正确答案的集合
Topiclist.get(i).setBorder(BorderFactory.createLineBorder(Color.RED));
Topiclist.get(i).setText( Topiclist.get(i).getText()+" 错误 "
+ " 正确答案:"+Correctlist.get(i) );
}
}
//计算用户做题的正确率
result1 = ((num*1.0)/( Topiclist.size())*100);
CountLable.setText("正确率:");
CountLable.setText(CountLable.getText()+result1 + "%");
sumtimeLable.setText("耗时:");
sum2=System.currentTimeMillis();
sum2=System.currentTimeMillis();
sum3 =(sum2-sum1)/1000;
System.out.println(sum1);
if(sum1==0) {
sumtimeLable.setText(sumtimeLable.getText()+""+0+"s");
}else {
sumtimeLable.setText(sumtimeLable.getText()+""+sum3+"s");
}
Correctlist.removeAll(Correctlist);
Resultlist.removeAll(Resultlist);
}
});
Startbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for(int i = 0;i<Textlist.size();i++) {
Textlist.get(i).setText("");
Textlist.get(i).enable(true);
}
Resultlist.removeAll(Resultlist);
Correctlist.removeAll(Correctlist);
CreateRandom();
sum1= System.currentTimeMillis();
}
});
}
public static void main(String[] args) {
for(int i1 = 0;i1<Textlist.size();i1++) {
Textlist.get(i1).enable(false);
}
new StudentTopic().setVisible(true);
Result();
}
}
运行结果


看似简单实际上要考虑很多问题,界面的设计及其功能的实现,重置按钮如何重置等问题,虽然过程有点难,但是理清思路就好写很多,先写界面再写功能实现
原文:https://www.cnblogs.com/hnzj-jy192-/p/14825617.html