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计划6067
Estimate估计这个任务需要多少时间,并规划大致工作步骤6067
Development开发10501417
Analysis需求分析 (包括学习新技术)180245
Coding Standard代码规范 (为目前的开发制定合适的规范)3027
Design具体设计60138
Coding具体编码480597
Code Review代码复审120211
Test测试(自我测试,修改代码,提交修改)180199
Reporting报告180206
Test Report测试报告6072
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划120134

转载于:https://www.cnblogs.com/liu-xin1995/p/9746484.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值