结对项目--四则运算图形化最终版

四则运算器图形化最终版

(然而被我做成了奇怪的东西

组员:13070030张博文 13070033刘云峰



一、概念阶段

最初是想试试用android做个计算器app,无奈从零学起着实太赶,而且这个计划在试用了无比卡顿占内存的android studio后就彻底搁浅了。

然后就被路人谣传说MFC好用,无奈从零学起着实太赶,而且这个计划在无人指导的摸黑下也顺手搁浅了。

最终便沦为了EasyX旧传统,好歹有点基础,但果然还是不太甘心。

以及因为当初想做app,所以抠了iphone计算器的图想当UI,结果就顺延地用到了最后,做完才发现成品跟老师的要求略有差池

因为根本就没让做普通的计算器。。。。

顺便一说长这样



二、执行阶段

上一个姑且算是个答题器才对,主要包含了从文件按行读取预先写好的算式,然后中缀转后缀,再进行后缀表达式求值,最后根据用户输入的数值进行比对给出结果。

然而我做着做着就跑偏了,做成了用户在图形化界面输入一个算式,然后按下等号,就会在后面出现相应的结果(A REALLY CALCULATOR!!)

演示起来大概就是这样:

输入式子并点击等于生成结果→ 

顺便一说刚才截图的时候发现原来我的中缀转后缀有问题导致结果有错,因为我的后缀表达式求值是根据中缀转后缀时用空格分隔操作数和计算符来识别的,结果因为空格生成位置问题导致两个计算符之间缺个空格结果答案就崩溃了,不过我已经机智的修复了(不过当初选择空格这个解决方法还真是弱智又粗暴)

string Transform(string bef){        //中缀转后缀并加入标示予以区分内部成分
    string aft;
    stack<char> str;
    int i=0;
    while (bef[i] != ‘=‘){
        switch (bef[i]){
        case ‘-‘:
        case ‘+‘:
            aft = aft + ‘ ‘;
            while (!str.empty() && str.top() != ‘(‘){
                    aft = aft + str.top();
                    str.pop();
                    aft = aft + ‘ ‘;
            }
            str.push(bef[i]);
            break;
        case ‘*‘:
        case ‘/‘:
            aft = aft + ‘ ‘;
            if (!str.empty()){
                while (str.top() == ‘*‘ || str.top() == ‘/‘ ){
                    aft = aft + str.top();
                    str.pop();
                    aft = aft + ‘ ‘;
                    if (str.empty())
                        break;
                }
            }
            str.push(bef[i]);
            break;
        case ‘(‘:
            str.push(bef[i]);
            break;
        case ‘)‘:
            if (!str.empty()){
                while (str.top() != ‘(‘){
                    aft = aft + ‘ ‘;
                    aft = aft + str.top();
                    str.pop();

                }
            }
            if (str.top() == ‘(‘)
                str.pop();
            else{
                cout << "算式错误,缺少左括号";
                exit(1);
            }
            break;
        default:
            aft = aft + bef[i];
            break;
        }
        i++;
    }
    aft = aft + ‘ ‘;
    while (!str.empty()){
        aft = aft + str.top();
        str.pop();
        aft = aft + ‘ ‘;
    }
    aft = aft + ‘#‘;
    return aft;
}

中缀转后缀



三、执行阶段Ver2.0

恍然大悟的时刻到来了,我突然意识到,说好的出题呢??这玩意跟出题毫无瓜葛啊!!于是我转念一想,顺手改装了一下做成了答题器和计算器二合一终极版

这是一个简单的选择界面,恩,我用画图画的

然后鼠标左键点击计算器或答题器便进入相应界面

计算器:    答题器:    区别在于计算器界面的左右括号按钮改为了±(其实也可以用减号代替)

细心的同学就会发现,答题器界面居然有算式??是的,这就是综合了上一个四则运算程序,外加新增的出题函数的新版本

string Create(int size,int sum){
    srand((unsigned)time(NULL));
    float dec = 0;
    int inte = 0;
    int sel = 0;
    int sel1 = 0;
    string quiz;
    char temp[100];
    int cases = 0;
    bool lock = false;
    for (int i = 0; i < sum; i++){
        for (int j = 0; j < size; j++){
            dec = rand() % 100;
            dec = dec / 100;
            inte = rand() % 5+1;    //随机生成一个整数
            dec = dec + inte;        //随机生成一个小数
            sel = rand() % 4;        //随机生成一个用于判断情况的数0123
            sel1 = rand() % 4;
            switch (cases){
            case 0:                    //初始部分
                if (sel>1){
                    if (sel > 1)
                        sprintf(temp, "%.2f", dec);    //生成小数
                    else
                        sprintf(temp, "%d", inte);    //生成整数
                    quiz += temp;
                    cases = 1;
                }
                else{
                    quiz += ‘(‘;                    //生成左括号
                    lock = true;
                    cases = 3;
                }
                break;
            case 1:                                    //前一个输出的是数
                if (sel == 0)
                    quiz += ‘+‘;
                if (sel == 1)
                    quiz += ‘-‘;
                if (sel == 2)
                    quiz += ‘*‘;
                if (sel == 3)
                    quiz += ‘/‘;
                cases = 2;
                break;
            case 2:                                    //前一个输出的是符号
                if (sel1 > 1 && lock == false){
                    quiz += ‘(‘;
                    lock = true;
                    cases = 3;
                    break;
                }
                if (sel > 1)
                    sprintf(temp, "%d", inte);        //生成整数
                else
                    sprintf(temp, "%.2f", dec);        //生成小数
                quiz += temp;
                cases = 1;
                if (sel1 <2 && lock == true){
                    quiz += ‘)‘;
                    lock = false;
                }
                break;
            case 3:
                if (sel > 1)
                    sprintf(temp, "%d", inte);        //生成整数
                else
                    sprintf(temp, "%.2f", dec);        //生成小数
                quiz += temp;
                if (sel == 0)
                    quiz += ‘+‘;
                if (sel == 1)
                    quiz += ‘-‘;
                if (sel == 2)
                    quiz += ‘*‘;
                if (sel == 3)
                    quiz += ‘/‘;
                cases = 2;
                break;
            }
            temp[0] = ‘\0‘;
        }
        if (cases == 3){
            sel = rand() % 2;
            if (sel > 0)
                sprintf(temp, "%d", inte);        //生成整数
            else
                sprintf(temp, "%.2f", dec);        //生成小数
            quiz += temp;
            if (sel == 0)
                quiz += ‘+‘;
            if (sel == 1)
                quiz += ‘-‘;
            if (sel == 2)
                quiz += ‘*‘;
            if (sel == 3)
                quiz += ‘/‘;
            sel = rand() % 2;
            if (sel > 0)
                sprintf(temp, "%d", inte);        //生成整数
            else
                sprintf(temp, "%.2f", dec);        //生成小数
            quiz += temp;
        }
        if (lock == true){
            quiz += ‘)‘;
            lock = false;
        }
        temp[0] = ‘\0‘;
        cases = 0;
        quiz = quiz + ‘=‘ + ‘\n‘;
    }
    return quiz;
}

出题函数Create()

答题器演示:

输入答案:  回答错误(会显示正确答案):  回答正确:



其他的类似于后缀表达式求值或者图形界面的代码就不一一列举了,不过果然还是想做一个app。。。。

附上组员合照:

2016-04-11

时间: 2024-12-18 16:05:46

结对项目--四则运算图形化最终版的相关文章

2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路

layout: post title: 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 key: 20180517 tags: OAA flow chart sequence diagram 泳道图 时序图 图表 OAA PM Master modify_date: 05-17 --- OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 说明: 本文发布于: gitee,github,博客园 转载和引用请指明原作者和连接及出处. 正文: 说明:这

结对项目--四则运算生成器(Java) 刘彦享+龙俊健

结对项目--四则运算生成器(Java) GitHub地址 合作者 刘彦享(3118005010) 龙俊健(3118005011) https://github.com/LYX708194/calculate 一.项目简介 说明 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2

结对项目-四则运算出题程序(GUI版)

目录: 一.致搭档(含项目地址) 二.PSP(planning) 三.结对编程中对接口的设计 四.计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模块部分异常处理说明 八.界面模块的详细设计过程 九.界面模块与计算模块的对接 十.结对过程的描述 十一.结对编程的优缺点 十二.PSP(actual) 一.致搭档:     队友:李庭娟(我很喜欢把这位队友叫娟子,感觉很亲切) 首先非常非常感谢这位结对搭档--娟子,从最初组队到如今合作,始终非常信任

结对项目——四则运算(GUI)

目录 1.仓库地址 2.开始前PSP展示 3.接口的设计 4.计算模块接口的设计与实现过程 5.计算模块接口部分的性能改进 6.计算模块部分单元测试展示 7.计算模块部分异常处理说明 8.界面模块的详细设计过程 9.界面模块与计算模块的对接 10.结对过程 11.结对编程优缺点 12.实际的PSP 1. 仓库地址:https://git.coding.net/jiapwy/newfouroperation.git 队友:胡雅馨 队友的博客地址:http://www.cnblogs.com/huy

结对项目——四则运算题目生成器

一.GitHub项目地址 : https://github.com/OurPrograming/Exercises 结对项目成员:软三 陈纪禧(3118005043).软三 程伟杰(3118005045) 二.PSP预计时间: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划  60 · Estimate · 估计这个任务需要多少时间 60 Development 开发 1680 · Analysis ·

四则运算图形化

C++实现图形化界面比较困难,所以我进过查询资料了解到了QT这个框架. 首先介绍一下QT: Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程. QT是一个比较复杂的开发框架,有自己的大量的数据类型和库,内容很多.我从国庆学习至今,已经有半个月的

结对项目-四则运算

项目:四则运算 结对伙伴:杜桥 功能:四则运算随机出题,并判断答案是否正确(只实现了正整数运算): 实现:用c#实现,用random.Next()完成随机部分,然后通过判断来检查答案是否正确: Https:https://git.coding.net/li_yuhuan/CalculateTest.git SSH:[email protected]:li_yuhuan/CalculateTest.git 代码: int v1; int v2; int a; char op; char[] ops

结对项目-四则运算 “软件”之升级版

随笔缘由:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 githup缘由:https://github.com/tianshizhao/tianshizhao 一.基本要求 从个人项目出发,将程序改造成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到: 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100. 用户可以输入答案 若用户输入答案正确,则提示正确:若答案错误,则提示错误,并要提示正确答案是

结对项目 四则运算 更新版

功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误.其他功能有待进一步实现. 头文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <math.h> 栈的结构体 typedef struct stack { double * e; int zd; }bd