软件工程结对作业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输入的名称有问题

 

 

.一起合作的照片

posted on 2016-03-26 12:34  大灰狼爱吃兔子  阅读(172)  评论(0编辑  收藏  举报