四则运算 |
实际花费时间 |
估计花费时间 |
计划 |
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