结对项目——四则运算 “软件”之升级版
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232
结对同伴的学号:201606120056
结对同伴的姓名:杜俊霖
一、开发环境
IntelliJ IDEA 2018.2.2
系统:Window 10 x64.
二、需求分析
1.原始需求:
生成题目,单个题目最多不能超过4个运算符,操作数小于100。
用户可以输入答案
若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
三、扩展要求
程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
用户答题结束以后,程序可以显示用户答题所用的时间
用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名
程序可以出单个整数阶乘的题目:如:4!=24
程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
程序可以设置皮肤功能,可以改变界面的颜色即可。
四、结对软件过程耗时估计与统计表
PSP2.1 |
Personal Software Process Stages |
Time Senior Student(h) |
Time(h) |
Planning |
计划 |
3 |
6 |
· Estimate |
估计这个任务需要多少时间 |
10 |
15 |
Development |
开发 |
8 |
10 |
· Analysis |
需求分析 (包括学习新技术) |
2 |
6 |
· Design Spec |
生成设计文档 |
2 |
4 |
· Design Review |
设计复审 |
1 |
3 |
· Coding Standard |
代码规范 |
0.5 |
1.5 |
· Design |
具体设计 |
6 |
8 |
· Coding |
具体编码 |
10 |
13 |
· Code Review |
代码复审 |
2 |
3 |
· Test |
测试(自我测试,修改代码,提交修改) |
2 |
3 |
Reporting |
报告 |
1 |
5 |
· |
测试报告 |
0 |
0 |
· |
计算工作量 |
3 |
6 |
· |
并提出过程改进计划 |
0 |
0 |
五、主要部分代码
public static void exercise(){ Timu(); JFrame f=new JFrame(); f.setTitle("在线答题系统(保留一位小数)"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setExtendedState(JFrame.MAXIMIZED_BOTH); f.setVisible(true); //设置窗口的大小和位置 f.setSize(600,500); f.setLocation(400,100); f.setLayout(null); JPanel pan1=new JPanel(); JLabel name1=new JLabel("题目"); pan1.add(name1); JTextField nameTest7=new JTextField(15); nameTest7.setBounds(10, 10, 180, 100); nameTest7.setText(M); // nameTest1.setPreferredSize(new Dimension(180,100)); pan1.add(nameTest7); JLabel name2=new JLabel("请输入答案"); pan1.add(name2); JTextField nameTest1=new JTextField(15); // String Answer=nameTest1.getText(); //int DaAn=Integer.parseInt(Answer); nameTest1.setBounds(10, 10, 180, 100); // nameTest1.setPreferredSize(new Dimension(180,100)); pan1.add(nameTest1); pan1.setBounds(10, 10, 200, 120); f.add(pan1); JPanel pan2=new JPanel(); JLabel name7=new JLabel("正确答案为:"); pan2.add(name7); JTextField nameTest2=new JTextField(15); nameTest2.setBounds(300, 10, 180, 100); // nameTest2.setPreferredSize(new Dimension(180,100)); pan2.add(nameTest2); pan2.setBounds( 300,10, 200, 120); f.add(pan2); JPanel pan3=new JPanel(); pan3.setLayout(null); JTextField nameTest3=new JTextField(15); nameTest3.setBounds(10, 60, 480, 200); nameTest3.setPreferredSize(new Dimension(300,100)); pan3.add(nameTest3); pan3.setBounds( 10,60, 500, 220); f.add(pan3); JPanel pan4 = new JPanel(); JButton btnStart=new JButton("下一题"); btnStart.setBounds(30, 300,30, 30); btnStart.setPreferredSize(new Dimension(100,80)); btnStart.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int daan=0 ; String Answer=nameTest1.getText(); daan=Integer.parseInt(Answer); System.out.println(daan); if(daan==DaAn){ nameTest2.setText(String.valueOf(DaAn)); Right++; }else { nameTest2.setText(String.valueOf(DaAn)); } Timu(); nameTest7.setText(M); pan1.add(nameTest7); pan1.setBounds(10, 10, 200, 120); f.add(pan1); } }); pan4.add(btnStart); pan4.setBounds(40, 350, 110, 90); f.add(pan4); JPanel pan5 = new JPanel(); JButton btnStart1=new JButton("提交"); btnStart1.setBounds(30, 300,30, 30); btnStart1.setPreferredSize(new Dimension(100,80)); btnStart1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int res=JOptionPane.showConfirmDialog(null,"是否提交","是否提交",JOptionPane.YES_NO_OPTION); if(res==JOptionPane.YES_OPTION){ nameTest3.setFont(new Font("宋体", Font.PLAIN, 20)); nameTest3.setText(" 提交成功 "); }else { nameTest3.setFont(new Font("宋体", Font.PLAIN, 20)); nameTest3.setText(" 请继续做题 "); } } }); pan5.add(btnStart1); pan5.setBounds(190, 350, 110, 90); f.add(pan5); JPanel pan6 = new JPanel(); // pan4.setLayout(null); JButton btnStart2=new JButton("查看分数"); btnStart2.setBounds(30, 300,30, 30); btnStart2.setPreferredSize(new Dimension(100,80)); btnStart2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //计算用时 nameTest3.setFont(new Font("宋体", Font.PLAIN, 20)); nameTest3.setText(" 一共有"+i+"道题,共答对了:"+Right+"题"); } }); pan6.add(btnStart2); pan6.setBounds(340, 350, 110, 90); f.add(pan6); }
六、程序展示
七、总结
这次程序算是这个学期以来用时比较长的程序了,做的过程中也觉得比较耗脑子,自己也尽力做了