【结对编程2:四则运算】扩展功能

林丽(M23381101) 肖任楷(M23382603)

仓库地址:https://gitee.com/hezhiyong_edu/pair-programming-xl.git

PSP表格

PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3030
· Estimate· 估计这个任务需要多少时间3030
Development开发3060
· Analysis· 需求分析 (包括学习新技术)1030
· Design Spec· 生成设计文档2020
· Design Review· 设计复审2020
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)4040
· Design· 具体设计5060
· Coding· 具体编码720840
· Code Review· 代码复审7080
· Test· 测试(自我测试,修改代码,提交修改)240250
Reporting报告120120
· Test Repor· 测试报告2030
· Size Measurement· 计算工作量3030
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划3030
合计14301630

功能扩展及代码仓库使用

扩展功能要求:通过导出导入文本文件方式进行答题和判题。

设计思路:

       ##现有代码程序流程框图:

       ##扩展功能实现设计思路:创建一个文本文件caculate.txt,将生成的题目信息和用户答题结果导入到文本文件中,并且在最后判分阶段时把结果也导入到文本文件中。

功能实现情况:

代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>

int compute(int a, int b, int c, int op)
{
    int answer, result;
    //打开文本文件
    FILE* fp;
    fp = fopen("caculate.txt", "w");
    if (fp == NULL)
    {
        printf("File cannot open!\n");
        exit(0);
    }

    switch (op)
    {
    case 1://全加运算
        printf("%d+%d+%d=", a, b, c);
        fprintf(fp, "%d+%d+%d=", a,b,c);
        result = a + b + c;
        break;
    case 2://全减运算
        if ((a > b) && ((a - b) > c))//保证结果为正数
        {
            printf("%d-%d-%d=", a, b, c);
            fprintf(fp, "%d-%d-%d=", a, b, c);
            result = a - b - c;
        }
        break;
    case 3://全乘运算
        printf("%d*%d*%d=", a, b, c);
        fprintf(fp, "%d*%d*%d=", a, b, c);
        result = a * b * c;
        break;
    case 4://全除运算
        if ((b != 0) && (c != 0))//分母不能为0
        {
            printf("%d/%d/%d=", a, b, c);
            fprintf(fp, "%d/%d/%d=", a, b, c);
            result = a / b / c;
        }
        break;
    case 5://加减混合运算
        if ((a + b) > c)//保证结果为正数
        {
            printf("%d+%d-%d=", a, b, c);
            fprintf(fp, "%d+%d-%d=", a, b, c);
            result = a + b - c;
        }
        break;
    case 6://乘加混合运算
        printf("%d*%d+%d=", a, b, c);
        fprintf(fp, "%d*%d+%d=", a, b, c);
        result = a * b + c;
        break;
    case 7://乘减混合运算
        if ((a * b) > c)
        {
            printf("%d*%d-%d=", a, b, c);
            fprintf(fp, "%d*%d-%d=", a, b, c);
            result = a * b - c;
        }
        break;
    case 8://除加混合运算
        if (b != 0)
        {
            printf("%d/%d+%d=", a, b, c);
            fprintf(fp, "%d/%d+%d=", a, b, c);
            result = a / b + c;
        }
        break;
    case 9://除减混合运算
        if (b != 0)
        {
            printf("%d/%d-%d=", a, b, c);
            fprintf(fp, "%d+%d+%d=", a, b, c);
            result = a / b - c;
        }
        break;
    case 10://乘除混合运算
        if (c != 0)
        {
            printf("%d*%d/%d=", a, b, c);
            fprintf(fp, "%d*%d/%d=", a, b, c);
            result = a * b / c;
        }
        break;

    default:
        printf("其它!\n");
        break;
    }

    fprintf(fp, "%d\n", answer);
    scanf_s("%d", &answer);//输入答案



    if (result == answer)//答案正确返回1,错误返回0
    {

        return 1;
    }
    else
    {
        return 0;
    }

}


//导出导入文本方式进行答题和判断*生成题目导入文本**答题时导出文本学生开始答题***答题结果存入文本



void print(int flag)
{
    if (flag)
    {
        printf("回答正确!\n");
    }
    else
    {
        printf("回答错误!\n");
    }


}
void menu()
{
    printf("***欢迎进入小学生算术四则运算测试系统***\n");
    printf("1.加法运算\n");
    printf("2.减法运算\n");
    printf("3.乘法运算\n");
    printf("4.除法运算\n");
    printf("5.加减混合运算\n");
    printf("6.乘加混合运算\n");
    printf("7.乘减混合运算\n");
    printf("8.除加混合运算\n");
    printf("9.除减混合运算\n");
    printf("10.乘除混合运算\n");
    printf("请选择考试内容:");

}



main()
{
    int a, b, c, i, result, zfs = 0, zct = 0, op = 0, k, n;

    menu();

    FILE* fp;
    fp = fopen("caculate.txt", "w");
    if (fp == NULL)
    {
        printf("File cannot open!\n");
        exit(0);
    }
    fprintf(fp,"请选择考试内容:%d\n",k);
    scanf_s("%d", &k);

   
    printf("请输入答题数量:");
    fprintf(fp, "请输入答题数量:%d\n", n);
    scanf_s("%d", &n);

    for (i = 0; i < n; i++)//循环n次,每次计算1道题 
    {
        a = rand() % 10;//随机生成三个100以内的数
        b = rand() % 10;
        c = rand() % 10;
        if (k == 1)     //判断输入的数
            op = 1;
        else if (k == 2)
            op = 2;
        else if (k == 3)
            op = 3;
        else if (k == 4)
            op = 4;
        else if (k == 5)
            op = 5;
        else if (k == 6)
            op = 6;
        else if (k == 7)
            op = 7;
        else if (k == 8)
            op = 8;
        else if (k == 9)
            op = 9;
        else if (k == 10)
            op = 10;
        else
            op = rand() % 4 + 1;

        result = compute(a, b, c, op);//调用四则运算函数,答案正确返回1,错误返回0
      
        print(result);//调用判断回答是否正确函数
        if (result)//计算总分
            zfs = zfs + 10;
        else
            zct++;//回答错误题数+1
    }

    printf("分数=%d,回答错误题数=%d\n", zfs, zct);
    fprintf(fp, "分数=%d,回答错误题数=%d\n", zfs, zct);

    fclose(fp);
    return 0;
}

功能实现后将更改后的代码commit到gitee仓库,完成push操作。

push结束后可以在仓库里对应的代码文件里看到代码的更改记录。

对于任务可扩展性和可维护性的评价分析

       可维护性是指当需要修改程序的某个模块时,对其他模块的影响和修改的代价;可扩展性是指当需要为程序添加新的功能时,对其他模块的影响和添加的代价。

       整体来看,我们本次结对编程作业的程序在面对维护和扩展需求时,它是有一定的可扩展性和可维护性的,但是还是有缺陷,主函数代码较冗杂,可在一定程度上将其模块化,以便程序的扩展和维护。

参考资料:

C语言文件操作_c语言导入外部文件-CSDN博客

C语言生成N个随机数组并存入txt文本文件_c语言生成随机数存入文件_tanghuan0827的博客-CSDN博客

程序的可维护性和可扩展性_可扩展性规范-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值