您的位置:首页 > 其它

软件工程结对作业01

2016-03-26 12:34 225 查看
一.设计思路

1.输入一个数控制题目个数

2.输入一个数控制取值范围(小于100)

3.输入一个数控制是否有正负数

4.输入一个数控制是否有余数

5.输入一个数控制是否有乘除法

6.输入一个数控制是否有括号

7.生成一个随机数,控制每道题的参数个数

8.在一个for循环里,生成随机数,如果生成的随机数大于输入的取值,则重新输入,否则进行下一步

9.用if语句分模块,分别判断是否有正负号,余数,乘除法,括号的情况

10.If是有负数的情况,要考虑生成的运算符是减号的情况,这种情况下,要变成加号,同时负号去掉

11.生成随机数(0-3),用于控制运算符,当运算符是除号时,要考虑除法有无余数,并记录除号的位置

12.If语句执行有乘除法的情况,并计算

13.If语句执行只有有加减法的情况,并计算

14.有括号的情况,如果只生成两个数,自动不加括号,若多个参数,则对符号位置设置随机数,进行括号位置的确定

15.计算时,有括号先计算括号里面的*/,在计算+-,然后计算括号外面的,还是先*/,在+-

16.计算式输出后,输入结果,精确到整数,不足1不进位

17.输入的结果与计算机储存的结果比较,如果相等,则正确,正确计数器+1,若错误,则错误计数器+1

18.For循环用户输入的次数

二.源代码:

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
void main()
{
int num;  //输入题目个数
int rnum;  //输入取值范围
int zfnum;  //输入是否有正负数
int ys;  //输入是否有余数
int fhn;  //输入是否有乘除法
int kh;   //输入是否有括号
cout<<"请输入题目个数:"<<endl;  //输入提示
cin>>num;      //输入题目个数
cout<<"请输入取值范围:(小于100)"<<endl;  //输入提示
cin>>rnum;  //输入取值范围
cout<<"请输入是否有正负数:(1.有 2.没有)"<<endl;  //输入提示
cin>>zfnum;  //输入是否有正负数
cout<<"除法是否有余数:(3.有 4.没有)"<<endl;  //输入提示
cin>>ys;  //输入是否有余数
cout<<"请输入是否有乘除法:(5.有 6.没有)"<<endl;  //输入提示
cin>>fhn;  //输入是否有乘除法
cout<<"请输入是否有括号:(7.有 8.没有)"<<endl;  //输入提示
cin>>kh;  //输入是否有括号
int sz[10];
int jg,zhjg;
int n1=0;
int n2=0;
int f=0;    //正负数的数字表示
int fhnum=0;    //运算符号的数字表示
char zf[10]={'+'};    //正负数的符号表示
char fh[10];    //运算符号的符号表示
int jl;   //记录除法的位置
int kh1;   //记录括号的位置
srand(time(0));
for(int l=0;l<num;l++)
{
int sznum=rand()%9+2;   //每道题的数字个数 2-10
for(int i=0;i<=sznum;i++)   //生成数字
{
sz[i]=rand()%100+1;
for(;;)      //控制数的范围
{
if(sz[i]>rnum)
sz[i]=rand()%100+1;
else
break;
}
if(zfnum==1)  //计算有负数
f=rand()%2;
if(f==1)     //负数
zf[i]='-';
if(zf[i]=='-')
sz[i]=sz[i]*(-1);
}
for(int i=0;i<sznum;i++)    //生成运算符号
{
if(fhn==5)   //计算有乘除法
{
fhnum=rand()%4;
if(fhnum==0)
fh[i]='+';
if(fhnum==1)
fh[i]='-';
if(fhnum==2)
fh[i]='*';
if(fhnum==3)
{
fh[i]='/';
if(ys==3)   //计算除法时有余数
{
jl=i;   //确定除法符号的位置
for(;;)
{
if(sz[i]%sz[i+1]!=0)
break;
else
{
sz[i]=rand()%100+1;
sz[i+1]=rand()%100+1;
}
}
}
if(ys==4)     //计算除法时没有余数
{
jl=i;   //确定除法符号的位置
for(;;)
{
if(sz[i]%sz[i+1]!=0)
{
sz[i]=rand()%100+1;
sz[i+1]=rand()%100+1;
}
else
break;
}
}
}
}
if(fhn==6)   //计算无乘除法
{
fhnum=rand()%2;
if(fhnum==0)
fh[i]='+';
if(fhnum==1)
fh[i]='-';
}
}
cout<<l+1<<": "<<sz[0];
if(sznum==2)   //如果一个题只有2个数字时不加括号
kh=8;
if(kh==7)  //有括号时
{
kh1=rand()%(sznum-2)+1;    //对符号位置设置随机数,进行括号位置的确定
for(int i=0;i<kh1-1;i++)
{
cout<<fh[i]<<sz[i+1];
}
cout<<fh[kh1-1]<<"("<<sz[kh1]<<fh[kh1]<<sz[kh1+1]<<")";
for(int i=kh1+1;i<sznum;i++)
{
cout<<fh[i]<<sz[i+1];
}
jg=sz[0];
//计算括号里的结果
if(fh[kh1]=='+')
{
sz[kh1]=sz[kh1]+sz[kh1+1];
sz[kh1+1]=0;
}
if(fh[kh1]=='-')
{
sz[kh1]=sz[kh1]-sz[kh1+1];
sz[kh1+1]=0;
}
if(fh[kh1]=='*')
{
sz[kh1]=sz[kh1]*sz[kh1+1];
sz[kh1+1]=1;
}
if(fh[kh1]=='/')
{
sz[kh1]=sz[kh1]/sz[kh1+1];
sz[kh1+1]=1;
}
//先算*/
for(int i=0;i<sznum;i++)
{
if(fh[i]=='*')
{
sz[i]=sz[i]*sz[i+1];
sz[i+1]=1;
}
if(fh[i]=='/')
{
sz[i]=sz[i]/sz[i+1];
sz[i+1]=1;
}
}
//最后+ -
for(int i=0;i<sznum;i++)
{
if(fh[i]=='+')
jg=jg+sz[i+1];
if(fh[i]=='-')
jg=jg-sz[i+1];
if(fh[i]=='*')
jg=jg*sz[i+1];
if(fh[i]=='/')
jg=jg/sz[i+1];
}
}
if(kh==8)    //没有括号时
{
for(int i=1;i<sznum;i++)
{
cout<<fh[i]<<sz[i+1];
}
jg=sz[0];
for(int i=0;i<sznum;i++)
{
if(fh[i]=='*')
{
sz[i]=sz[i]*sz[i+1];
sz[i+1]=1;
}
if(fh[i]=='/')
{
sz[i]=sz[i]/sz[i+1];
sz[i+1]=1;
}
}
for(int i=0;i<sznum;i++)
{
if(fh[i]=='+')
jg=jg+sz[i+1];
if(fh[i]=='-')
jg=jg-sz[i+1];
if(fh[i]=='*')
jg=jg*sz[i+1];
if(fh[i]=='/')
jg=jg/sz[i+1];
}
}
cout<<"="<<endl;
cout<<"请输入结果,精确到整数,不足1不进位:"<<endl;
cin>>zhjg;
if(zhjg-jg<0.001)
{
n1++;
cout<<"正确!"<<endl;
}
else
{
n2++;
cout<<"错误!"<<endl;
}
}
cout<<"正确的个数:"<<n1<<",错误的个数:"<<n2<<endl;
}


三.运行结果截图







四.按照PSP0级的要求记录开发过程中的项目计划日志、时间记录日志、缺陷记录日志

周活动总结表

姓名:牛俊燕 日期:2016.3.26

日期\任务

听课

编写程序

阅读课本

日总计

周日

周一

100分钟

120分钟

220分钟

周二

120分钟

120分钟

240分钟

周三

140分钟

110分钟

250分钟

周四

周五

100分钟

100分钟

周六

90分钟

60分钟

150分钟

周总计

100分钟

570分钟

290分钟

960分钟

学生:牛俊燕 日期:3/26/2016

教师:王建民 课程:软件工程概论

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/21

8:00

9:50

10分钟

100分钟

听课

上课

13:00

15:00

120分钟

编程序

作业4

3/22

15:30

16:50

80分钟

讨论

作业5

16:50

17:30

40分钟

编程序

作业5

18:00

20:00

120分钟

看书

构建之法

3/23

14:00

16:30

10分钟

140分钟

编程序

作业5

16:30

19:10

110分钟

写精读

阅读笔记

3/25

17:30

19:10

100分钟

编程序

作业5

3/26

9:00

11:30

180分钟

写总结

精读,进度条等

缺陷记录日志示例

学生:牛俊燕

日期:3/26/2016

教员:王建民老师

程序号:4,5

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/21

1

7

编码

编译

2min

描述:MAX没有初始化

2

23

编码

编译

5min

描述:创建数组有错误,通过new创建数组

3

40

编码

编译

20min

描述:try......catch......finally语句的处理

3/22

4

54

编码

编译

30min

描述:当随机生成数是负数时,且运算符是减号,要将运算符变成加号,且随机生成数不带负号,运行时出不来想要的结果

3/23

5

72

设计

编译

50min

描述:有乘除时,在除法有余数时,没有考虑记录除法符号的位置

6

114

编码

编译

20min

描述:对符号位置设置随机数,进行括号位置的确定有错误

3/25

7

208

编码

编译

15min

描述:cin输入的名称有问题

五.一起合作的照片

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: