结对项目-四则运算 “软件”

本作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213

我的GitHub地址:https://github.com/lenkay013/ly013

一、从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

  • 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
  • 用户可以输入答案
  • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

二扩展的方向

1.程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数

2.用户答题结束以后,程序可以显示用户答题所用的时间

3.答题结束可以显示用户答错的题目个数和答对的题目个数

4.用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 

三 时间记录表

PSP2.1

Personal Software Process Stages

Time Senior Student(h)

Time(h)

Planning

计划

0

0

· Estimate

估计这个任务需要多少时间

25

30

Development

开发

8

9

· Analysis

需求分析 (包括学习新技术)

0.2

0.3

· Design Spec

生成设计文档

0

0

· Design Review

设计复审

0.5

0.5

· Coding Standard

代码规范

0.5

1.5

· Design

具体设计

2.8

3.7

· Coding

具体编码

5

5

· Code Review

代码复审

3

4

· Test

测试(自我测试,修改代码,提交修改)

1

1

Reporting

报告

0

0

Test Report

测试报告

1

2

·workload

计算工作量

1

2

·correction

并提出过程改进计划

 

 

1

1

 

四  结对过程

1.结对成员:姓名:刘渊  201606120013  博客园地址:https://www.cnblogs.com/lenkay/

                  姓名:刘铖  201606120023  博客园地址:https://www.cnblogs.com/lc97/

2.开发环境:idea

3.扩展方向:

程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数(刘铖)

用户答题结束以后,程序可以显示用户答题所用的时间(刘渊)

答题结束可以显示用户答错的题目个数和答对的题目个数(刘渊)

用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 (刘铖)

 

4.结对学习照片:

五  部分代码:

小程序界面代码:

public Main()
{
   //创建组件
   jb1=new JBut
public Main()
{
   //创建组件
   jb1=new JButton("确认");
   jb1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
         String N=Name.getText();
         String M=Number.getText();
         name.add(N);
         number.add(M);
                
                Start frame = new Start();
                frame.setTitle("四则运算训练小程序");
                  frame.setSize(600,400);
                  frame.setLocationRelativeTo(null);
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  frame.setVisible(true);
                frame.setVisible(true);     // 打开新界面
                dispose();        // 关闭当前界面



                try {    
                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());    
                 } catch (Exception e) {    
                     e.printStackTrace();    
                 } 

统计分数代码:
int size = list1.size();
int errorSum = size - rightSum;
JFrame resultFrame = new JFrame();
resultFrame.setTitle("运算结果");
resultFrame.setSize(500, 500);
resultFrame.setLocationRelativeTo(null);
resultFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
resultFrame.setVisible(true);
JPanel panel7 = new JPanel();
Timelabel.setText("答题用时为:" + time +" "+"做题总数: " + size + " " + "正确数:" + rightSum + " " + " 最终得分:" + rightSum * 5);
panel7.add(Timelabel);
resultFrame.add(panel7, BorderLayout.NORTH);
JPanel panel = new JPanel();
Font font = new Font(Font.DIALOG, Font.PLAIN, 20);
JTable table = new JTable();
String[] columns = { "     题 目        ", "  你的答案  ","  正确答案  ","  状 态  " };
int[] columnWidth={160,120,120,50};
DefaultTableModel model = new DefaultTableModel(columns, 0);
table.setModel(model);
JScrollPane scrollPane = new JScrollPane(table);   //支持滚动 
TableColumnModel columnModel=table.getColumnModel();
int count=columnModel.getColumnCount();
javax.swing.table.TableColumn column =columnModel.getColumn(0);
column.setPreferredWidth(columnWidth[0]);
计算做题时间代码:
public class Timer extends JFrame {    
   
    private static final long serialVersionUID = 1L;  
    private static final String INITIAL_LABEL_TEXT = "00:00:00 000";     
    // 计数线程    
    private CountingThread thread = new CountingThread();    
    // 记录程序开始时间    
    private long programStart = System.currentTimeMillis();    
    // 程序一开始就是暂停的    
    private long pauseStart = programStart;    
    // 程序暂停的总时间    
    private long pauseCount = 0;    
    private JLabel label = new JLabel(INITIAL_LABEL_TEXT);    
    private JButton startPauseButton = new JButton("开始");    
    private JButton resetButton = new JButton("清零");    
    String time;
    private ActionListener startPauseButtonListener = new ActionListener() {    
        public void actionPerformed(ActionEvent e) {    
            if (thread.stopped) {    
                pauseCount += (System.currentTimeMillis() - pauseStart);    
                thread.stopped = false;    
                startPauseButton.setText("暂停");    
            } else {    
                pauseStart = System.currentTimeMillis();    
                thread.stopped = true;    

 

ton("确认");
   jb1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
         String N=Name.getText();
         String M=Number.getText();
         name.add(N);
         number.add(M);
                
                Start frame = new Start();
                frame.setTitle("四则运算训练小程序");
                  frame.setSize(600,400);
                  frame.setLocationRelativeTo(null);
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  frame.setVisible(true);
                frame.setVisible(true);     // 打开新界面
                dispose();        // 关闭当前界面



                try {    
                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());    
                 } catch (Exception e) {    
                     e.printStackTrace();    
                 } 

统计分数代码:
int size = list1.size();
int errorSum = size - rightSum;
JFrame resultFrame = new JFrame();
resultFrame.setTitle("运算结果");
resultFrame.setSize(500, 500);
resultFrame.setLocationRelativeTo(null);
resultFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
resultFrame.setVisible(true);
JPanel panel7 = new JPanel();
Timelabel.setText("答题用时为:" + time +" "+"做题总数: " + size + " " + "正确数:" + rightSum + " " + " 最终得分:" + rightSum * 5);
panel7.add(Timelabel);
resultFrame.add(panel7, BorderLayout.NORTH);
JPanel panel = new JPanel();
Font font = new Font(Font.DIALOG, Font.PLAIN, 20);
JTable table = new JTable();
String[] columns = { "     题 目        ", "  你的答案  ","  正确答案  ","  状 态  " };
int[] columnWidth={160,120,120,50};
DefaultTableModel model = new DefaultTableModel(columns, 0);
table.setModel(model);
JScrollPane scrollPane = new JScrollPane(table);   //支持滚动 
TableColumnModel columnModel=table.getColumnModel();
int count=columnModel.getColumnCount();
javax.swing.table.TableColumn column =columnModel.getColumn(0);
column.setPreferredWidth(columnWidth[0]);
计算做题时间代码:
public class Timer extends JFrame {    
   
    private static final long serialVersionUID = 1L;  
    private static final String INITIAL_LABEL_TEXT = "00:00:00 000";     
    // 计数线程    
    private CountingThread thread = new CountingThread();    
    // 记录程序开始时间    
    private long programStart = System.currentTimeMillis();    
    // 程序一开始就是暂停的    
    private long pauseStart = programStart;    
    // 程序暂停的总时间    
    private long pauseCount = 0;    
    private JLabel label = new JLabel(INITIAL_LABEL_TEXT);    
    private JButton startPauseButton = new JButton("开始");    
    private JButton resetButton = new JButton("清零");    
    String time;
    private ActionListener startPauseButtonListener = new ActionListener() {    
        public void actionPerformed(ActionEvent e) {    
            if (thread.stopped) {    
                pauseCount += (System.currentTimeMillis() - pauseStart);    
                thread.stopped = false;    
                startPauseButton.setText("暂停");    
            } else {    
                pauseStart = System.currentTimeMillis();    
                thread.stopped = true;    

  

 

六 运行效果截图:

 

 

 

七 总结感悟

通过结对编程实验,进一步复习了Java的知识内容,重温了用Java做界面的知识点,这次在四则运算符号优先级的问题上用到了栈方面的知识,但对这部分代码还是不够理解,在计时方面主要用了线程的知识,这次实验进一步加深对Java的理解,希望,能够在Java编程的路上越走越远。

 

posted on 2018-10-24 19:48  LaxY0013  阅读(215)  评论(0编辑  收藏  举报

导航