软件工程结对作业01

一.设计思路

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

800

950

10分钟

100分钟

听课

上课

1300

1500

120分钟

编程序

作业4

3/22

1530

1650

80分钟

讨论

作业5

1650

1730

40分钟

编程序

作业5

1800

2000

120分钟

看书

构建之法

3/23

1400

1630

10分钟

140分钟

编程序

作业5

1630

1910

110分钟

写精读

阅读笔记

3/25

1730

1910

100分钟

编程序

作业5

3/26

900

1130

180分钟

写总结

精读,进度条等

缺陷记录日志示例

学生:牛俊燕

日期:3/26/2016

教员:王建民老师

程序号:45         

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

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输入的名称有问题

.一起合作的照片

原文地址:https://www.cnblogs.com/niujunyan/p/5322660.html