关键词:
结对作业
—— 用户界面设计
徐楠青 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 功能设计
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
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
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
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
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、需求分析随着课余娱乐项目的增加,现在的小孩子在学习上变得越来越不... 查看详情 ...、题目要求:使用JAVA编程语言,采用结对编程方式实现四则运算出题小程序,软件基本功能要求如下:1.由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错... 查看详情 题目我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:能够自动生成四则运算练习题可以定制题目数量用户可以选择运算符用户设置最大数(如十以内、百以内等)用户选择是否有括号、... 查看详情 201521123036?曾艺佳博客201521123039?王兴 ?博客码云地址:四则运算选择改进的代码地址:个人博客地址2:http://www.cnblogs.com/belong033源代码:https://coding.net/u/Belong033/p/java-third/git需求分析:针对现有代码的改进分析,新开发功能的... 查看详情 图形界面的四则运算生成工具一个简单的图形界面四则运算生成工具byLinariawith??环境操作系统:Windows10语言:C++/XML集成开发环境:Visualstudio2017界面主界面关于页面界面设计基于开源UI库duilib代码实现全部代码托管在Coding题目生... 查看详情 题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目1:我们在刚开始上课的时候介绍过一个小学四则运算自... 查看详情 软件工程第五次作业1,题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目:我们在刚开始上课的时候介绍过... 查看详情 题目要求本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。题目1:我们在刚开始上课的时候介绍过一个小学四则运算自... 查看详情 使用JAVA编程语言,采用结对编程方式实现四则运算出题小程序,软件基本功能要求如下:由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道... 查看详情 结对编程作业总览项目成员:黄俊麟201521123022郑子杰201521123021项目码云地址:https://gitee.com/paitouzi/pair_programming/tree/master具体项目分析:1.需求分析本次结对编程,我们自己新编写了一个计算器程序,能够实现简单的加减乘除运算... 查看详情 ...本次结对码云链接:二、需求分析取自《结对编程项目-四则运算》题目内容(week1)实现一个命令行程序,要求:自动生成小学四则运算题目(加、减、 查看详情 一、结对信息项目组合郭炜埕201521123065郑晓丽201521123066项目地址(https://gitee.com/vicheng/four_operations/tree/master)二、结对编程1、需求分析原来的代码只实现简单的两位数之间的加减乘除,而我们为需要改进其功能,实现了三位数的计... 查看详情 在软件工程综合实现专题课上,杨雨婷与邻宿舍的雨晨同学约定结对写程序。经过一个忙碌的周末,我们于周日晚上正式开始讨论。项目要求与背景小学老师要每周给同学出三百道四则运算练习题。要求算式包含两个运算符,数... 查看详情 小学随机生成四则运算题目一·题目选择我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:(1)能够自动生成四则运算练习(2)可以定制题目数量(3)用户可以选择运算符(4)用户设置... 查看详情 结对编程——四则运算(第一周)需求分析题目要求一个命令行程序实现:自动生成小学四则运算题目(加、减、乘、除)支持整数支持多运算符(比如生成包含100个运算符的题目)支持真分数统计正确率需求理解输入:需要计算... 查看详情 结对编程——四则运算(第一周)需求分析题目要求一个命令行程序实现:自动生成小学四则运算题目(加、减、乘、除)支持整数支持多运算符(比如生成包含100个运算符的题目)支持真分数统计正确率需求理解输入:需要计算... 查看详情 20165206结对编程项目-四则运算阶段一总结一、需求分析通过命令行输入生成题目的数量,随机生成题目。生成的题目不重复。生成的四则运算题目支持整数、支持多运算符。能够根据作答情况统计正确的个数。二、设计思路设计... 查看详情 ...伍成员:段浩彬、陈作麒1题目:实现一个自动生成小学四则运算题目的命令行程序。2说明:自然数:0,1,2,…。真分数:1/2,1/3,2/3,1/4,1’1/2,…。运算符:+,?,×,÷。括号:(,)。等号:=。分隔符:空格(用于四则运算符和等号前后)... 查看详情 201571030139/201571030134小学生四则运算软件结对编程(代码片段)
软件工程第二次结对编程(代码片段)
软件工程网络15结对编程作业(代码片段)
软件工程结对编程第2次作业-图形界面四则运算生成工具
软件工程(2018)结对编程第2次作业(代码片段)
结对编程作业2(代码片段)
软件工程第五次作业——第二次结对编程(代码片段)
201571030106/201571030116《小学四则运算练习软件》结对项目报告(代码片段)
软件工程网络15专业结对编程(代码片段)
20165223结对编程之四则运算(代码片段)
网络四则运算结对编程(代码片段)
结对编程:简单四则运算软件(代码片段)
结对编程2(代码片段)
结对编程——四则运算(第一周)(代码片段)
结对编程——四则运算(第一周)(代码片段)
20165203结对编程四则运算(第一周)(代码片段)
结对编程(代码片段)