基于pythonGUI开发小学生四则运算练习软件(附源码)

  • 本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能:

  • 由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;

  • 题库自动生成;

  • 程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;

  • 程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

  • 程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;

  • 测试有计时功能,测试时动态显示用户开始答题后的消耗时间。

  • 程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

二丶软件设计:使用类图

三丶核心功能代码

出题

界面

四丶程序运行

1.登陆页面

2.点击开始答题进行答题

3.点击再来一次重新答题

.

五丶结对过程

六丶PSP

PSP2.1

任务内容

计划共完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

30

20

Estimate

· 估计这个任务需要多少时间,并规划大致工作步骤

30

20

Development

开发

1200

1100

Analysis

需求分析 (包括学习新技术)

50

50

Design Spec

生成设计文档

50

50

Design Review

设计复审 (和同事审核设计文档)

100

100

Coding Standard

代码规范 (为目前的开发制定合适的规范)

50

50

Design

具体设计

200

100

Coding

具体编码

500

600

Code Review

代码复审

50

50

Test

测试(自我测试,修改代码,提交修改)

200

100

Reporting

报告

44

30

Test Report

测试报告

14

2

Size Measurement

计算工作量

10

8

Postmortem & Process Improvement Plan

事后总结 ,并提出过程改进计划

20

20

七、题目要求

1、通过单元测试代码,测试加法是否能正确工作;

2、通过单元测试代码,测试加减乘除功能。

3、通过单元测试代码,测试计算类对于各种参数的支持:

a. 输入是有错误的,例如 “1 ++ 2”,

b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,

c. 或者是 “ 248 / 0” 怎么办?

d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?

e. 那么如果真的计算结果是 “-1” 又怎么处理呢?

4、通过增量修改的方式,改进程序, 完成对各种错误情况的处理。

二、实验步骤

需求分析

通过单元测试代码,测试程序加减乘除功能是否正确工作,对于格式错误、数值溢出、除零异常是否能检测的到。

设计测试框架,模拟测试数据

测试加减乘除功能

TEST_METHOD(TestAdd)    //测试加法
        {
            Test.CheckInput("1/2+4");
            Assert::AreEqual(test11,Test.add());
        }
        TEST_METHOD(TestAdd1)
        {
            Test.CheckInput("3+1/3");
            Assert::AreEqual(test12, Test.add());
        }
        TEST_METHOD(TestAdd2)
        {
            Test.CheckInput("2+4");
            Assert::AreEqual(test13, Test.add());
        }
        TEST_METHOD(TestAdd3)
        {
            Test.CheckInput("1/2+1/4");
            Assert::AreEqual(test14, Test.add());
        }

        TEST_METHOD(TestSub)           //测试减法
        {
            Test.CheckInput("1/2-1/3");
            Assert::AreEqual(test21, Test.sub());
        }

        TEST_METHOD(TestSub1)
        {
            Test.CheckInput("1/3-2");
            Assert::AreEqual(test22, Test.sub());
        }
        TEST_METHOD(TestSub2)
        {
            Test.CheckInput("2-1/3");
            Assert::AreEqual(test23, Test.sub());
        }
        TEST_METHOD(TestSub3)
        {
            Test.CheckInput("5-3");
            Assert::AreEqual(test24, Test.sub());
        }

        TEST_METHOD(TestMul)       //测试乘法
        {
            Test.CheckInput("1×2");        
            Assert::AreEqual(test31, Test.mul());
        }
        TEST_METHOD(TestMul1)
        {
            Test.CheckInput("1/2×2");
            Assert::AreEqual(test32, Test.mul());
        }
        TEST_METHOD(TestMul2)
        {
            Test.CheckInput("2×1/3");
            Assert::AreEqual(test33, Test.mul());
        }
        TEST_METHOD(TestMul3)
        {
            Test.CheckInput("1/3×1/2");
            Assert::AreEqual(test34, Test.mul());
        }
        TEST_METHOD(TestDiv)       //测试除法
        {
            Test.CheckInput("1/2÷2");
            Assert::AreEqual(test41, Test.div());
        }
        TEST_METHOD(TestDiv1)
        {
            Test.CheckInput("4÷1/2");
            Assert::AreEqual(test42, Test.div());
        }
        TEST_METHOD(TestDiv2)
        {
            Test.CheckInput("1/2÷2/3");
            Assert::AreEqual(test43, Test.div());
        }
        TEST_METHOD(TestDiv3)
        {
            Test.CheckInput("1÷2");
            Assert::AreEqual(test44, Test.div());
        }

单元测试加法功能

string Calc::add()
{
    size_t iPos = g_szInput.find('+');
    g_szX = g_szInput.substr(0, iPos);
    g_szY = g_szInput.substr(iPos+1, g_szInput.length()-1-iPos);
    size_t iPosInX = g_szX.find('/');
    g_iFirNer = stoi(g_szX.substr(0, iPosInX));
    if (iPosInX == -1)
    {
        g_iFirDer = 1;
    }
    else
    {
        g_iFirDer = stoi(g_szX.substr(iPosInX+1, g_szInput.length() - 1 - iPosInX));
    }
    size_t iPosInY = g_szY.find('/');
    g_iSecNer = stoi(g_szY.substr(0, iPosInY));
    if (iPosInY == -1)
    {
        g_iSecDer = 1;
    }
    else
    {
        g_iSecDer = stoi(g_szY.substr(iPosInY+1, g_szInput.length() - 1 - iPosInY));
    }
    simplify(g_iFirNer, g_iFirDer, g_iSecNer, g_iSecDer);  
    g_iRusNer = g_iFirNer*g_iSecDer + g_iFirDer*g_iSecNer;
    g_iRusDer = g_iFirDer*g_iSecDer;
    init(g_iRusNer, g_iRusDer);    //约分成真分数
    g_szRusDer = "";
    g_szRusNer = "";
    if (g_iRusDer == 1)
    {
        g_szRusNer += to_string(g_iRusNer);
        return  g_szRusNer;
    }
    else{
        g_szRusDer += to_string(g_iRusDer);
        g_szRusNer += to_string(g_iRusNer);
        return  g_szRusNer + "/" + g_szRusDer;
    }
}

测试结果

测试结果

八、PSP

PSP2.1

Personal Software Process Stages

Estimated time(h)

actual time(h)

Planning

计划

1

1.5

Estimate

估计这个任务需要多少时间

10

15

Development

开发

8

10

Analysis

需求分析 (包括学习新技术)

0.5

1

Design Spec

生成设计文档

2

2

Design Review

设计复审

0.3

0.5

Coding Standard

代码规范

0.5

0.4

Design

具体设计

1.5

1.3

Coding

具体编码

8

7

Code Review

代码复审

0.5

1

Test

测试(自我测试,修改代码,提交修改)

0.2

0.5

Reporting

报告

2

2

测试报告

0.5

0.5

计算工作量

0.5

1

并提出过程改进计划

2

4

完整代码:https://download.csdn.net/download/pythonyanyan/87390370

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员奇奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值