2018103000 小学四则运算练习软件项目报告

一、版本控制

git地址:https://git.coding.net/liu-xin/arithmetic.git

二、需求分析

1.控制台输入参数n控制四则运算题目的数量。

2.随机生成四则运算题目,运算符分别使用符号+-*÷来表示。

3.随机生成数字在 0 和 100 之间,随机生成运算符在3个到5个之间。

4.每个练习题要包含2种以上运算符,计算结果不得出现负数与非整数。

5.题目和答案按格式输出在“result.txt”中,文件目录与程序目录一致。

6.输出格式:

学号

题目=答案

7.(附加题)支持随机生成有括号的运算式,并求得正确解。其中括号数量必须大于2对,小于运算符个数。

8.(拓展题)支持真分数的随机生成题目和结果计算。注意:真分数应自动化简为最简形式。

三、功能设计

1.基本功能:支持控制台输入参数,从而控制随机生成题目数量,输出到与此时.exe文件路径相同的“result.txt”文件中,输出内容为学号、题目和答案。

2.扩展功能:1)输出到“result.txt”内容更具有可读性,分别标注序号。

      2)设计模式二,若是输入两个参数可实现软件交互性:随机生成题目,手动输入结果,对结果进行反馈,判断对错,错了给出正确答案。

      3)基于模式二的基础上实现题目统计:答对题目x道,一共有题目t道。

四.设计实现:

我将每一个功能实现都用函数写,主函数进行调用,提升了代码的易改、可读性。具体设计如下:

1)建立栈结构体。

2)利用栈进行数字与运算符的存储与计算操作。

3)利用rand()生成随机数和运算符。

4)判断运算符优先级时,为优先级编码赋值更容易进行比较。

5)用StrReplace(char strRes[],char from[], char to[])函数将 "/"转化为"÷"。(但是在后来的使用中,我采用直接输出方式,没用到的此函数,就直接删除掉了。)

6)利用重定向进行“result.txt”文件输出。

五、算法详解

1.生成随机数:

        用rand()函数进行随机数生成的时候,应该先声明srand((unsigned)time(NULL));用来生成真正的不重复的随机数,否则就会生成伪随机数,即出现相同数字的情况。要想实现生成不同的随机数,就需要使srand()函数设置不同的种子,我们知道时间是一直在改变的,所以我们可以通过利用计算机不同的时间来获得不同的种子。time(NULL)返回的是系统的时间,从1970.1.1零点零分算起,单位为秒,所以会生成不同随机数,注意:调用时需要用time.h头文件。具体代码如下:

随机数生成:

//获取随机数函数:
int getnum()
{
    int n;
    n =rand()%100;  //对100取余操作
        srand((unsigned)time(NULL));//srand()就是给rand()提供种子seed
    return n; 
}

获取随机运算符

//获取随机运算符函数
char getsign()
{
    char signal[4]={'+','-','*','/'};
    return signal[rand()%4];
}

 2.判断优先级

        判断优先级的时候,我为运算符赋值,将字符型转化为整型更容易判断比较。

//判断优先级 
int get_pri(int ope)
{
    switch(ope)
    {
        case '(':   return 0;
        case '+':
        case '-':   return 1;
        case '*':
        case '/':   return 2;
        default :   return -1;
    }
}

3.控制台实现文件输出

int main(int argc,char *argv[])
{
    //srand((unsigned)time(NULL)); 
    srand(time(0));
    int total;
    char in[200];
    char out[200];
    getcwd(in, sizeof(in));  //获取本地文件直接地址
    strcat(in, "\\");
    strcpy(out, in);
    strcat(out, "result.txt");
    freopen(out, "w", stdout); // freopen重定向使输出到out.txt中
    scanf("%d",&total);
    printf("2018103000\n");
    f1(total);
    return 0;
}

六、测试运行

1.基本功能

          我将可执行文件放在桌面进行测试,命名为1.exe(单纯只是为了自己测试运行的时候方便)。打开控制台输入文件名1,进入到文件中,输入4,随机生成5个题目和正确结果在“result.txt”中。


2.基本功能优化:

  输出到“result.txt”内容更具有可读性,分别标注序号。

3.拓展功能:答题测评

        控制台输入.exe的名字(1.exe),输入空格,接着输入2,代表模式二,输入生成题目数量,进行答题功能。

       

七、总结
        本次设计模块化原则主要通过通过功能写函数实现,利用不同函数将不同功能进行实现,逻辑清晰,易读易改。在本次软件设计中遇到了很多困难,比如创建栈,随机生成表达式,字符转换,控制台输入,文件输出等,虽然刚开始觉得自己不可能完成,但随着自己网上学习的过程中,难点逐一突破后,自己渐渐在遇到问题时,不是选择逃避,而是进行问题攻克。这次作业不仅锻炼了自己的代码能力,更培养了自己学习兴趣。

八、PSP

PSP 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 60 67
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 60 67
Development 开发 1050 1417
Analysis 需求分析 (包括学习新技术) 180 245
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 27
Design 具体设计 60 138
Coding 具体编码 480 597
Code Review 代码复审 120 211
Test 测试(自我测试,修改代码,提交修改) 180 199
Reporting 报告 180 206
Test Report 测试报告 60 72
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 120 134

猜你喜欢

转载自www.cnblogs.com/liu-xin1995/p/9746484.html
今日推荐