现代软件工程结对编程——四则运算ui(代码片段)

Esther_Xr Esther_Xr     2022-11-03     334

关键词:

结对作业

                            —— 用户界面设计

徐楠青 PB16120408

王馨儿 PB16060765

 项目简介:

本次结对编程的任务是写一个能自动生成小学四则运算题目并给出答案的软件,分为core组和ui组。我们抽到的是ui组,负责用户界面设计。

github地址:https://github.com/EstherXr/learngit/tree/master

目录

  1.1 需求分析

  1.2 功能设计

  1.3 界面设计

  1.4 代码架构

  1.5 测试运行

  1.6 PSP

  1.7 总结

1.1 需求分析

  在core组的基础上完成Windows和Linux电脑图形界面的程序,使其有一定的界面和辅助功能,最终交付给用户使用。

 

1.2 功能设计

  • 对上述各属性参数(生成题目的数量、操作数的数量、操作数的最大值、结果的最大值,是否支持加减乘除,是否支持乘方,是否支持小数、真分数运算等)进行设置
  • 调用Core模块得到题目和运算结果,显示题目,接受输入,并能判断答案是否正确
  • 增加“倒计时”功能,每个题目必须在20秒内完成,否则,得0分并进入下一题
  • 增加“错题记录”功能,对于答错的题,将其保存下来,当下次进行“复习”时,增大错题在练习题中的概率
  • 增加”历史纪录“功能,把用户做题的成绩纪录下来并可以展现历史纪录
  • 增加“成绩分享”功能,生成成绩单,想一想成绩单里要展现什么,仅仅是最后的得分吗?错题的类型及数量?帮用户分析其薄弱的环节,提出合理的学习建议?

 

1.3 界面设计

  

  初始界面:1)输入题目数量,操作数数量,操作数最大值,结果最大值,小数精度

                         2)是否支持加减乘除、小数、真分数、乘方运算

                         3)是否需要启用错题记录功能

                         4)是否展示历史记录

  完成初始设置后,点击“OK”,提示输入合法与否与生成题目数量。

  做题界面:1)界面上方显示20秒倒计时,倒计时结束自动进入下一题且该题得分为0

                         2)输入答案后可以点击“下一题”按钮

                         3)所有题目答题结束可以点击“提交”按钮,显示得分

  若选择错题记录功能,则在做题过程中的所有错题都将会被记录到一文件中。

  若选择历史记录功能,则每一次的成绩都将会被记录到一文件中。

  若选择清空错题记录,则记录错题的文件将会被一键清空。

  在过程中,可以随时点击“Reset"按钮,回到初始界面进行各种设置。

 

1.4 代码架构

  首先通过Qt Creator中的ui界面安放各个Push Button,再转到每个Push Button的槽编写代码。

  OK Button:

  1 void Widget::on_pushButton_clicked()//OK Button
  2 
  3     QString a=tr("叮咚!题目已生成:");
  4     QString b=ui->lineEdit_2->text();
  5     QString str=a+b;
  6     QString exe;
  7     canshu sample;
  8 
  9     bool ok;
 10     int sign;
 11     total=b.toInt(&ok,10); //将字符串转换为int整形数据
 12 
 13     string c_str;
 14     c_str=ui->lineEdit_2->text().toStdString();//问题数量
 15     sample.num_ques=c_str+" ";
 16 
 17     ok=ui->checkBox_6->checkState();//是否支持加法运算
 18     if(ok==true)
 19         add=1;
 20     else
 21         add=0;
 22 
 23     ok=ui->checkBox_7->checkState();//是否支持减法运算
 24     if(ok==true)
 25         sub=1;
 26     else
 27         sub=0;
 28 
 29     ok=ui->checkBox_8->checkState();//是否支持乘法运算
 30     if(ok==true)
 31         mul=1;
 32     else
 33         mul=0;
 34     ok=ui->checkBox_9->checkState();//是否支持除法运算
 35     if(ok==true)
 36         div1=1;
 37     else
 38         div1=0;
 39     ok=ui->checkBox_3->checkState();//是否支持小数运算
 40     if(ok==true)
 41         decimal=1;
 42     else
 43         decimal=0;
 44     ok=ui->checkBox_4->checkState();//是否支持真分数运算
 45     if(ok==true)
 46         real=1;
 47     else
 48         real=0;
 49     ok=ui->checkBox_5->checkState();//是否支持乘方运算
 50     if(ok==true)
 51         power=1;
 52     else
 53         power=0;
 54 
 55     op=ui->lineEdit->text().toStdString()+" ";//操作数的个数
 56     c_str=ui->lineEdit_3->text().toStdString();//操作数的最大值
 57     sample.scalemax_op=c_str+" ";
 58     jingdu=ui->lineEdit_7->text().toStdString()+" ";//小数精度
 59     biggest=ui->lineEdit_6->text().toStdString()+" ";//结果最大值
 60 
 61     sign=Setting(sample);
 62     if(sign==-1)
 63     
 64         QMessageBox::warning(this, tr("提示"),tr("非法输入"));
 65         ui->lineEdit_2->clear();    //clear lineEdit_2, make users fill in the number of exercise again
 66         ui->lineEdit->clear();
 67         ui->lineEdit_3->clear();
 68         ui->lineEdit_6->clear();
 69         ui->lineEdit_7->clear();
 70         ui->checkBox->setCheckState(Qt::Unchecked);
 71         ui->checkBox_2->setCheckState(Qt::Unchecked);
 72         ui->checkBox_3->setCheckState(Qt::Unchecked);
 73         ui->checkBox_4->setCheckState(Qt::Unchecked);
 74         ui->checkBox_5->setCheckState(Qt::Unchecked);
 75         ui->checkBox_6->setCheckState(Qt::Unchecked);
 76         ui->checkBox_7->setCheckState(Qt::Unchecked);
 77         ui->checkBox_8->setCheckState(Qt::Unchecked);
 78         ui->checkBox_9->setCheckState(Qt::Unchecked);
 79         return;
 80     //how to deal with error input?
 81 
 82     score=(int *)malloc(sizeof(int)*total);  //allot saving spaces
 83     if(total==1)
 84         ui->pushButton_4->setEnabled(false);//if there is one exercise,disenable "xia yi ti" button
 85     for(int i=0;i<total;i++)
 86         score[i]=0;
 87 
 88     exe=QString::fromStdString(expResult[circle-1].express);
 89     ui->label_3->setText(exe);
 90     ui->lineEdit_2->clear();   //clear lineEdit_2, and users put the answer in it
 91     ui->lineEdit->clear();
 92     ui->lineEdit_3->clear();
 93     ui->lineEdit_6->clear();
 94     ui->lineEdit_7->clear();
 95     ui->pushButton->setVisible(false);
 96     ui->pushButton_2->setVisible(false);  //make "OK" and "Cancel" buttons unvisible
 97     ui->lineEdit->setEnabled(false);
 98     ui->lineEdit_3->setEnabled(false);
 99     ui->lineEdit_6->setEnabled(false);
100     ui->lineEdit_7->setEnabled(false);
101     ui->checkBox->setEnabled(false);
102     ui->checkBox_2->setEnabled(false);
103     ui->checkBox_3->setEnabled(false);
104     ui->checkBox_4->setEnabled(false);
105     ui->checkBox_5->setEnabled(false);
106     ui->checkBox_6->setEnabled(false);
107     ui->checkBox_7->setEnabled(false);
108     ui->checkBox_8->setEnabled(false);
109     ui->checkBox_9->setEnabled(false);
110     ui->pushButton_4->setVisible(true);
111     ui->pushButton_5->setVisible(true);   //make "xia yi ti" and "ti jiao" buttons visible
112     QMessageBox::information(this, tr("提示"), str);//tell users the exercise have been placed
113 
114     timer = new QTimer(this);
115     tim = new  QTimer(this);
116 
117     connect(timer, SIGNAL(timeout()), this, SLOT(showTimelimit()));
118     connect(tim, SIGNAL(timeout()), this, SLOT(on_pushButton_4_clicked()));
119 
120     timer->start(1000);
121     tim->start(TIME);
122     if(total==1)
123     
124         disconnect(tim, SIGNAL(timeout()), this, SLOT(on_pushButton_4_clicked()));
125         connect(tim, SIGNAL(timeout()), this, SLOT(on_pushButton_5_clicked()));
126     
127 
128     if(num>=20)
129     
130         timer->stop();
131  //       tim->stop();
132     
133 
View Code

 

  Next Question Button:

 1 void Widget::on_pushButton_4_clicked()//下一题按钮
 2 
 3     timerinit();
 4     timinit();
 5 
 6     timer = new QTimer(this);
 7     connect(timer, SIGNAL(timeout()), this, SLOT(showTimelimit()));
 8     tim = new QTimer(this);
 9     connect(tim, SIGNAL(timeout()), this, SLOT(on_pushButton_4_clicked()));
10 
11     timer->start(1000);
12     tim->start(TIME);
13 
14     if(num>=20)
15     
16         timer->stop();
17 //        tim->stop();
18     
19 
20     circle++;
21     QString c="题目";
22     QString d=QString::number(circle, 10);
23     QString str1;
24     QString e,exe;
25     string f;
26 
27     if(circle<=total)
28     
29         if(circle==total)
30         
31             ui->pushButton_4->setEnabled(false);
32             disconnect(timer, SIGNAL(timeout()), this, SLOT(showTimelimit()));
33             disconnect(tim, SIGNAL(timeout()), this, SLOT(on_pushButton_4_clicked()));
34             connect(timer, SIGNAL(timeout()), this, SLOT(showTimelimit()));
35             connect(tim, SIGNAL(timeout()), this, SLOT(on_pushButton_5_clicked()));
36         
37         exe= QString::fromStdString(expResult[circle-1].express);
38         str1=c+d+":"+exe;
39         ui->label_3->setText(str1);
40         e=ui->lineEdit_2->text();
41         f=e.toStdString();
42         if(f.compare(expResult[circle-2].result)==0)
43             score[circle-2]=1;
44         else
45             score[circle-2]=0;    //judge whether the answer is correct
46         ui->lineEdit_2->clear();
47     
48 
View Code

 

  Reset Button:

 1 void Widget::on_pushButton_3_clicked()//Reset
 2 
 3     timerinit();
 4     timinit();
 5 
 6     ui->pushButton->setVisible(true);
 7     ui->pushButton_2->setVisible(true);//make "OK" and "Cancel" buttons visible
 8     ui->pushButton_4->setVisible(false);
 9     ui->pushButton_5->setVisible(false);//make "xia yi ti" and "ti jiao" buttons unvisible
10     ui->lineEdit_2->clear();   //clear lineEdit_2, make users fill in the number of exercise again
11     ui->label_3->setText(tr("请在下行中输入题目总数"));
12     ui->pushButton_4->setEnabled(true);
13     ui->pushButton_5->setEnabled(true);
14     ui->lineEdit->setEnabled(true);
15     ui->lineEdit_3->setEnabled(true);
16     ui->lineEdit_6->setEnabled(true);
17     ui->lineEdit_7->setEnabled(true);
18     ui->checkBox->setEnabled(true);
19     ui->checkBox_2->setEnabled(true);
20     ui->checkBox_3->setEnabled(true);
21     ui->checkBox_4->setEnabled(true);
22     ui->checkBox_5->setEnabled(true);
23     ui->checkBox_6->setEnabled(true);
24     ui->checkBox_7->setEnabled(true);
25     ui->checkBox_8->setEnabled(true);
26     ui->checkBox_9->setEnabled(true);
27     ui->checkBox->setCheckState(Qt::Unchecked);
28     ui->checkBox_2->setCheckState(Qt::Unchecked);
29     ui->checkBox_3->setCheckState(Qt::Unchecked);
30     ui->checkBox_4->setCheckState(Qt::Unchecked);
31     ui->checkBox_5->setCheckState(Qt::Unchecked);
32     ui->checkBox_6->setCheckState(Qt::Unchecked);
33     ui->checkBox_7->setCheckState(Qt::Unchecked);
34     ui->checkBox_8->setCheckState(Qt::Unchecked);
35     ui->checkBox_9->setCheckState(Qt::Unchecked);
36     ui->label_2->clear();
37     circle=1;
38     sum=0;
39     if(score!=NULL)
40     
41         free(score);
42         score=NULL;
43     
44 
View Code

 

  Hand In Button:

 1 void Widget::on_pushButton_5_clicked()//hand in button
 2 
 3     timerinit();
 4     timinit();
 5 
 6     QString a,b,e,str;
 7     int i;
 8     string f;
 9     e=ui->lineEdit_2->text();
10     f=e.toStdString();
11     if(f.compare(expResult[circle-1].result)==0)
12         score[circle-1]=1;
13     else
14         score[circle-1]=0;    //judge whether the answer is correct
15     ui->lineEdit_2->clear();
16     for(i=0;i<total;i++)
17     
18         sum+=score[i];
19     
20     ui->pushButton_4->setEnabled(false);
21     ui->pushButton_5->setEnabled(false);
22     ui->checkBox->setCheckState(Qt::Unchecked);
23     ui->checkBox_2->setCheckState(Qt::Unchecked);
24     ui->checkBox_3->setCheckState(Qt::Unchecked);
25     ui->checkBox_4->setCheckState(Qt::Unchecked);
26     ui->checkBox_5->setCheckState(Qt::Unchecked);
27     ui->checkBox_6->setCheckState(Qt::Unchecked);
28     ui->checkBox_7->setCheckState(Qt::Unchecked);
29     ui->checkBox_8->setCheckState(Qt::Unchecked);
30     ui->checkBox_9->setCheckState(Qt::Unchecked);
31     ui->label_3->clear();
32     ui->label_2->clear();
33     a=tr("提交成功!您的成绩为:");
34     b=QString::number(sum, 10);
35     str=a+b;
36     QMessageBox::information(this, tr("提示"), str);  //give the score
37 
View Code

 

1.5 测试运行

  在与core对接并完善页面之后,下面选用了与某一组对接以后的最终界面:

  

  输入题目数量、操作数个数与操作数最大值,并选择想要练习的运算类型后,输出提示界面:

  

  做题时的界面:

  

  做题结束,显示成绩:

  

  若选用错题记录功能,则在文件中显示历史错题:

  

  

1.6 PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

90

90

.Estimate

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

90

90

Development

开发

3420

3600

Analysis

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

360

380

.Design Spec

生成设计文档

360

380

.Design Review

设计复审

180

120

Coding Standard

代码规范

180

200

Design

具体设计

720

740

Coding

具体编码

1440

1480

Code Review

代码复审

90

120

Test

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

180

200

Reporting

报告

540

540

Test Report

测试报告

180

180

Size Measurement

计算工作量

180

180

Postmortem & Process Improvement Plan

事后总结,并提出过程改进计划

180

180

All

合计

4050

4250

 

1.7 总结

  1.7.1 结对编程的意义

  每个人在各自独立设计,实现软件的过程中,避免不了走弯路和犯错误。而在结对编程的过程中,因为有频繁的交流和讨论,可以在一定程度上扬长避短,减少犯错的几率。遇到困难的时候,可以一起想办法。当有另一个人和你同时工作的时候,你会不好意思开小差,也不好意思糊弄和划水。

  本次结对编程遇到的最主要的困难是,我们都是第一次接触UI设计,不会使用相关的工具。但是大家在一起学习的氛围很好。其次,就是在与core组对接的时候,会发现各种各样的BUG。

软件工程第三周结对编程(代码片段)

结对编程之四则运算1、项目成员连燕波:201521123081曾飞远:201521123080队员风采展示结对编程码云地址:https://gitee.com/Yanboooooooo/software_engineering_2015211230812、需求分析随着课余娱乐项目的增加,现在的小孩子在学习上变得越来越不... 查看详情

201571030139/201571030134小学生四则运算软件结对编程(代码片段)

...、题目要求:使用JAVA编程语言,采用结对编程方式实现四则运算出题小程序,软件基本功能要求如下:1.由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错... 查看详情

软件工程第二次结对编程(代码片段)

题目我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:能够自动生成四则运算练习题可以定制题目数量用户可以选择运算符用户设置最大数(如十以内、百以内等)用户选择是否有括号、... 查看详情

软件工程网络15结对编程作业(代码片段)

201521123036?曾艺佳博客201521123039?王兴 ?博客码云地址:四则运算选择改进的代码地址:个人博客地址2:http://www.cnblogs.com/belong033源代码:https://coding.net/u/Belong033/p/java-third/git需求分析:针对现有代码的改进分析,新开发功能的... 查看详情

软件工程结对编程第2次作业-图形界面四则运算生成工具

图形界面的四则运算生成工具一个简单的图形界面四则运算生成工具byLinariawith??环境操作系统:Windows10语言:C++/XML集成开发环境:Visualstudio2017界面主界面关于页面界面设计基于开源UI库duilib代码实现全部代码托管在Coding题目生... 查看详情

软件工程(2018)结对编程第2次作业(代码片段)

题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目1:我们在刚开始上课的时候介绍过一个小学四则运算自... 查看详情

结对编程作业2(代码片段)

软件工程第五次作业1,题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目:我们在刚开始上课的时候介绍过... 查看详情

软件工程第五次作业——第二次结对编程(代码片段)

题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目1:我们在刚开始上课的时候介绍过一个小学四则运算自... 查看详情

201571030106/201571030116《小学四则运算练习软件》结对项目报告(代码片段)

使用JAVA编程语言,采用结对编程方式实现四则运算出题小程序,软件基本功能要求如下:由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道... 查看详情

软件工程网络15专业结对编程(代码片段)

结对编程作业总览项目成员:黄俊麟201521123022郑子杰201521123021项目码云地址:https://gitee.com/paitouzi/pair_programming/tree/master具体项目分析:1.需求分析本次结对编程,我们自己新编写了一个计算器程序,能够实现简单的加减乘除运算... 查看详情

20165223结对编程之四则运算(代码片段)

...本次结对码云链接:二、需求分析取自《结对编程项目-四则运算》题目内容(week1)实现一个命令行程序,要求:自动生成小学四则运算题目(加、减、 查看详情

网络四则运算结对编程(代码片段)

一、结对信息项目组合郭炜埕201521123065郑晓丽201521123066项目地址(https://gitee.com/vicheng/four_operations/tree/master)二、结对编程1、需求分析原来的代码只实现简单的两位数之间的加减乘除,而我们为需要改进其功能,实现了三位数的计... 查看详情

结对编程:简单四则运算软件(代码片段)

在软件工程综合实现专题课上,杨雨婷与邻宿舍的雨晨同学约定结对写程序。经过一个忙碌的周末,我们于周日晚上正式开始讨论。项目要求与背景小学老师要每周给同学出三百道四则运算练习题。要求算式包含两个运算符,数... 查看详情

结对编程2(代码片段)

小学随机生成四则运算题目一·题目选择我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:(1)能够自动生成四则运算练习(2)可以定制题目数量(3)用户可以选择运算符(4)用户设置... 查看详情

结对编程——四则运算(第一周)(代码片段)

结对编程——四则运算(第一周)需求分析题目要求一个命令行程序实现:自动生成小学四则运算题目(加、减、乘、除)支持整数支持多运算符(比如生成包含100个运算符的题目)支持真分数统计正确率需求理解输入:需要计算... 查看详情

结对编程——四则运算(第一周)(代码片段)

结对编程——四则运算(第一周)需求分析题目要求一个命令行程序实现:自动生成小学四则运算题目(加、减、乘、除)支持整数支持多运算符(比如生成包含100个运算符的题目)支持真分数统计正确率需求理解输入:需要计算... 查看详情

20165203结对编程四则运算(第一周)(代码片段)

20165206结对编程项目-四则运算阶段一总结一、需求分析通过命令行输入生成题目的数量,随机生成题目。生成的题目不重复。生成的四则运算题目支持整数、支持多运算符。能够根据作答情况统计正确的个数。二、设计思路设计... 查看详情

结对编程(代码片段)

...伍成员:段浩彬、陈作麒1题目:实现一个自动生成小学四则运算题目的命令行程序。2说明:自然数:0,1,2,…。真分数:1/2,1/3,2/3,1/4,1’1/2,…。运算符:+,?,×,÷。括号:(,)。等号:=。分隔符:空格(用于四则运算符和等号前后)... 查看详情