天天看点

【软件工程实践】结对项目-四则运算 “软件”之升级版

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

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

二、下面附有 8 个相互独立的可以扩展的方向。 

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

三、同学 两两结对,每对学生选取 8 个可扩展方向上面的 4个加以实现。

 此次使用c语言来做实验,代码如下:

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<math.h>

#include<windows.h>

float algorithm(float x,char op,float y);

float algorithm2(float x,char op2,float y);

char createnumberop();

void test1(int n);

main()

{

int chooce,n;

system("color 3c");

printf("\n\t1.100以内四则运算 (小数点后保留两位)\n\n");

printf("\n请输入四则运算的数目:");

scanf("%d",&n);

if(n<=0)

printf("【数目有误,请重新输入!】\n");

test1(n);

}

//第一个运算符计算

float algorithm(float x,char op,float y)

float result;

switch(op)

case'+':result = x + y;break;

case'-':result = x - y;break;

case'*':result = x * y;break;

case'/':result = x / y;break;

return result;

//第二个运算符计算

float algorithm2(float x,char op2,float y)

switch(op2)

//随机产生运算符

char mark()

int op;

op=rand() % 4+1;

case 1:return'+';

case 2:return'-';

case 3:return'*';

case 4:return'/';

return 0;

//100以内四则运算

void test1(int n)

int i,rightnum=0,wrongnum=0;//rightnumber正确的个数,wrongnumber错误的个数

float a,b,c,answer,result;

char op,op2;//运算符

srand(time(NULL));

for(i=0;i<n;i++)

a=(float)(rand() % 100+1);//获取随机数

b=(float)(rand() % 100+1);

c=(float)(rand() % 100+1);

op=mark();//获取随机运算符

op2=mark();

if((op=='+' || op=='-') && (op2=='*' || op2=='/')){

result=algorithm(a,op,algorithm2(b,op2,c));

else{

result=algorithm2(algorithm(a,op,b),op2,c);//根据运算符优先级得出结果

if(result< 0)//如果结果为非正数,则重新获取题目

i--;

continue;

printf("%.f %c %.f %c %.f = ",a,op,b,op2,c);

scanf("%f",&answer);

if((int)(100.0*answer+0.5)/100.0==(int)(100.0*result+0.5)/100.0 && result>=0)//四舍五入精确到小数点后两位

printf("【回答正确!】\n\n");

rightnum++;

else

printf("【回答错误!答案是:%.2f】\n\n",(int)(100.0*result+0.5)/100.0);

wrongnum++;

printf("你总共答对了%d题,准确率为%.2f%!\n",n,rightnum,(float)rightnum/(float)n*100);

system("pause");

system("CLS");

printf("\n\n");

【软件工程实践】结对项目-四则运算 “软件”之升级版

四、估计实现所需时间,记录结对编程时间,并写在博客中。

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 120 220
· Estimate 估计这个任务需要多少时间 40 200
Development 开发 60
· Analysis 需求分析 (包括学习新技术) 30
· Design Spec 生成设计文档
· Design Review 设计复审 5 20
· Coding Standard 代码规范
· Design 具体设计 35
· Coding 具体编码 42
· Code Review 代码复审 10 6
· Test 测试(自我测试,修改代码,提交修改) 12
Reporting 报告 50 25
Test Report 测试报告
·workload 计算工作量
·correction 并提出过程改进计划