软件工程第二次作业

- 题目:
请编写一个能自动生成小学四则运算题目的 “软件”。
让程序能接受用户输入答案,并判定对错。
最后给出总共 对/错 的数量。

——需求分析

此“软件”主要面向小学生,考虑到小学生对计算机的使用和掌握程度有限,所以此“软件”的操作应尽量简单,易使用;

用户能在此"软件"上联系简单的四则运算;

此“软件”能提交用户的答案,并判断对错;

在使用此 “软件”后及时给出正确与错误的题目数。

——设计

考虑到小学生的计算能力有限,本“软件”随机生成百以内的操作数;

考虑学生的年级跨越较大,且各年级的学生掌握的知识水平有差异。本“软件”采用菜单的方式,可由用户选择所要练习的运算法则;

考虑到小学生在小学阶段没有接受过负数知识,本“软件”确保在用户进行减法练习时,随机生成的两个操作数相减不会出现负数;

另外,考虑到用户进行除法练习时对无法整除的运算结果输入不便,本“软件”确保在用户进行除法练习时,随机生成的两个操作数相除不会出现分数或小数;

对年级较高的学生,本“软件”设计了四则混合运算,方便用户进行综合练习;

最后,本“软件”在设计上使用C语言实现。

——代码实现

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
//函数原型
void doExercise(int);
int test(int);
//    功能:计分器
void doExercise(int n)
{
    int score=0;        //练习得分,初始化为0
    int i=0;            //练习题数的计数器
    
    for(i=1;i<=5;i++)
    {
        score=score+test(n);
    }
    printf("本次练习5道题,你做对了%d道,做错了%d道\n",score,5-score);
    printf("========================================================\n");
}

int test(int n)
{
    int ranswer=0;            //正确答案
    int uanswer=0;            //用户输入的答案
    int t=0;                //临时变量
    char operation;            //运算类别
    int num1=0;                //操作数1
    int num2=0;                //操作数2

    srand(time(NULL));        //初始化伪随机数种子
    num1=rand()%100;            //取0—99之间的随机数
    num2=rand()%100;

    //进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式
    if(n==5)
    {
        n=rand()%4+1;
    }

    switch(n)
    {
        case 1:
            operation='+';
            break;
        case 2:
            operation='-';
            break;
        case 3:
            operation='*';
            break;
        case 4:
            operation='/';
            break;
    }

    if((operation=='-') && (num1<num2))//当减数大于被减数数时,交换
    {
        t=num1;
        num1=num2;
        num2=t;
    }

    if(operation=='/')
    {
        if(num2==0)
            num2=1;//当除数随机取0时,就将除数置为1
        num1=num1*num2;//为确保整除将被除数与除数的乘积赋值给被除数
    }

//输出测试题本身、提示用户输入
    printf("%d%c%d= ",num1,operation,num2);
    scanf("%d",&uanswer);

//程序计算正确结果
    switch(operation)
    {
        case '+':
        ranswer=num1+num2;
        break;

        case '-':
        ranswer=num1-num2;
        break;

        case '*':
        ranswer=num1*num2;
        break;

        case '/':
        ranswer=num1/num2;
        break;
    }
//评判,做对返回1,做错返回0
    if(uanswer==ranswer)
    {
        printf("做对了!\n");
        return 1;
    }
    else
    {
        printf("做错了!\n");
        return 0;
    }
}

void main()
{
    int choice=0;    
    do
    {
        printf("\t1、加法练习\t2、减法练习\n");
        printf("\t3、乘法练习\t4、除法练习\n");
        printf("\t5、综合练习\t0、退出系统\n");
        printf("===================================================\n");
        printf("请输入你的选择(0--5):");

        int choice;
        scanf("%d",&choice);

        while(choice<0 || choice>5)
        {
            printf("你的输入有误,请重新输入:");
            scanf("%d",&choice);
        }
        if(choice==0)
            break;                    //用户选择0,退出循环(退出系统)
        doExercise(choice);        //做什么练习,并启动评分
    }while(true);

    printf("欢迎使用,再见\n");
}


——测试

不合法输入

 

 

减法:

 

除法:

 

综合并退出:

 

耗时分析:

Process Stages

Time

Time(%)

需求分析

15

25

代码设计

23

38.33

代码复审

11

18.33

测试

5

8.33

分析总结

6

10

 

——分析总结

 

本“软件”经过反复测试后,在保证软件正确性的基础上,使用结构化设计,易于维护。且界面相对友好,并在用户输入不合法时提示用户重新输入,使软件的健壮性得到提高。有很多不足之处,请老师给与指正。

posted @ 2015-04-10 12:47  尚清丽  阅读(151)  评论(2编辑  收藏  举报