• 软件工程第二次作业


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

    ——需求分析

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

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

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

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

    ——设计

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

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

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

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

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

    最后,本“软件”在设计上使用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道 ",score,5-score);
        printf("======================================================== ");
    }

    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("做对了! ");
            return 1;
        }
        else
        {
            printf("做错了! ");
            return 0;
        }
    }

    void main()
    {
        int choice=0;    
        do
        {
            printf(" 1、加法练习 2、减法练习 ");
            printf(" 3、乘法练习 4、除法练习 ");
            printf(" 5、综合练习 0、退出系统 ");
            printf("=================================================== ");
            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("欢迎使用,再见 ");
    }


    ——测试

    不合法输入

     

    减法:

     

    除法:

     

    综合并退出:

     

    耗时分析:

    Process Stages

    Time

    Time(%)

    需求分析

    15

    25

    代码设计

    23

    38.33

    代码复审

    11

    18.33

    测试

    5

    8.33

    分析总结

    6

    10

    ——分析总结

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

  • 相关阅读:
    C# 向共享文件夹上传及下载文件
    Generate the Jobs script from msdb Database
    用水晶报表做条码打印
    多语言系统的实现
    用DataBaseMail发图片并茂的邮件
    浅析WINFORM工具条的重用实现
    具有代表性的财务报表--应收帐
    C#实现Combobox自动匹配字符
    动态列报表
    真正通用的SQL分页存储过程
  • 原文地址:https://www.cnblogs.com/sql0708/p/4414270.html
Copyright © 2020-2023  润新知