从互相了解对方的代码思路然后确定用C++编写,到用win32写界面时变得摇摆不定的考虑着要不要改变语言,再到用QT写完界面后发现短信接口一般都不提供C++,最后到QT打包出来的可执行文件在别的设备上无法运行,可谓是道路坎坷,一路磨难。

在结对项目开始前,就已经和队友互相阐述并了解对方的代码逻辑和思维,在讨论后,一致认为使用首先生成题库然后再从题库中抽题的形式好,既保证了题目不会重复,又较运行时再生成题目的形式反应更快。而这份代码是用C++写的,因而一致决定继续使用C++作为编程语言去实现结对编程项目需求。天真的认为只需要编写一个UI然后套用个人项目的代码就可以了

【win32/windows api尝试】

秉着java能用swing写UI,C++也肯定能用windows api去写UI的,于是入了一个大坑,使用win32去写界面,但是繁杂多样的api写一个窗口都需要不短的代码,在了解了HWND句柄、WinMain函数后,发现我们压根没有那么多的时间去学习那么多的基层的东西,就不得不放弃,然后在考虑是否需要换java去完成该项目。

【QT库带来的快捷UI入门】

在考虑了MFC和一些其他的C++编写窗口的工具后,决定选择了较易上手的QT库。然后发现真的容易上手,就和做ppt一样,就简单的做出了项目需求中的UI界面,把各个窗口之间的逻辑写好后,粗糙的UI基本就有了。账号密码的存储、题库的读写、出题的查重以及出题的卷子生成对应的时间戳txt,均直接套用个人项目的代码即可。

【题库答案选项的编写】

起初认为题库答案生成只是一个小问题,但当开始着手做时,发现并不是那么简单的,尤其是括号的处理,使得计算答案变得不易。partner G机智的使用了栈先进后出的特性,将操作数和操作符分别用两个栈储存,考虑优先级,让优先级高的操作符先出栈,然后该方式定义计算的时候,由于是先进后出,对于操作数来说是逆着计算的,因而除号优先级级高于乘号,减号优先级高于加号。经过一层层测试修改,小初高均生成了1000题的题库给QT使用。同时也和partner G一块将粗糙的UI界面做了美工,主要是依靠partner的审美,使得UI变得精致起来。

【验证码短信的艰难】

验证码短信,因为身边的同学用java编写的时候都说不难,所以自己也没觉得这功能实现是多大点事儿,直到真正开始做的时候……

那天中午一口气注册了五六个短信平台,包括腾讯云、阿里云等大公司,结果发现都没有对应C++的SDK或者api接口,然后也就一个个去询问个平台的客服,但他们基本没有提供什么有用的信息,之后在秒赛平台上找到了C++代码的demo,但是苦于libcurl库的安装不成功,仍旧无法实现。最后是询问陆老师确认没有接口是行不通的情况下,大胆一试,决定使用java实现短信功能,然后再用C++去调用。当然,从结果来看,我们当然是成功了。但本质上来说原理并不复杂,只是简单的利用cmd去调用打包好的发短信的jar程序,不需要java与c++直接的沟通,因为java程序只起到一个代替c++发送验证码的作用罢了。

【将QT库程序打包且能在无QT环境下的设备运行】

这是成功前的最后一座大山,看着那个生成的活泼可爱的exe程序,却无法运行,只会“应用程序缺少xxx.dll”“应用程序无法正常启动0xc000007b”。中间百度谷歌试过各种办法,问过上一届学长,均找不到解决办法,最后的问题的根源是在32位和64位的QT控制台上。解决方式见CSDN(原创) https://blog.csdn.net/qq_40685445/article/details/101573311

至此。项目小初高数学学习软件完工。

一点点经验:

  1. 有问题别退缩,迎难而上,但也要适当的另辟蹊径,就像简单的用c++调用java程序而避开了不提供c++接口无法发送短信的问题。
  2. 谷歌百度多多益善。不管做什么,问题肯定是有的,多多使用百度,百度不到用谷歌,将大问题细化为几个小问题再逐个击破。
  3. 多精一门语言。别怀里抱着c++当宝贝,热度排前的python、java为何不好好学学呢?

带UI的小初高数学学习软件—艰难地用C++(QT库)实现的过程的更多相关文章

  1. 结对编程——带UI的小初高数学学习软件

    一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...

  2. 带UI的小初高数学学习软件

    结对编程项目总结   一.项目需求分析与功能总结 (1)用户注册功能 用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册. (2)设置密码功能 密码6-10位,必须含大小写字母和数 ...

  3. 结对编程项目复盘:带UI的小初高数学学习软件

    实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...

  4. 带UI 的小初高数学学习系统 —结对编程项目总结

    一. 项目综述 本系统是基于QT Creator 4.3.0开发环境,开发语言C++,能够实现用户注册,发送短信验证码,用户登陆,用户选择题目类型和数量,显示用户本次答题基本功能.支持对用户账号查重, ...

  5. HNU_小初高数学学习软件_功能说明

    结对编程项目主要功能: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-1 ...

  6. HNU_小中初数学学习软件(可视化编程)_结对项目总结与体会

    前言 经过将近一周的共同努力,HnuLyx和我终于完成了项目,期间心酸苦辣,受益良多,请允许我一一道来. 问题(需求要求的

  7. 小C的数学问题 【单调栈】

    问题 J: 小C的数学问题 时间限制: 1 Sec  内存限制: 128 MB 提交: 565  解决: 141 [提交] [状态] [命题人:外部导入] 题目描述 小C是个云南中医学院的大一新生,在 ...

  8. JAVA小项目实例源码—学习娱乐小助手

    代码地址如下:http://www.demodashi.com/demo/11456.html 一.程序实现 项目目录: MyJFrame:实现项目界面样式: AppProcess:实现调用api或爬 ...

  9. 微信小程序开发:学习笔记[4]——样式布局

    微信小程序开发:学习笔记[4]——样式布局 Flex布局 新的布局方式 在小程序开发中,我们需要考虑各种尺寸终端设备上的适配.在传统网页开发,我们用的是盒模型,通过display:inline | b ...

随机推荐

  1. [] == ![] 返回 true

    对于==来说,如果数据类型不同,就会进行隐式类型转换. 首先判断是否在对比 null 和 undefined,是的话就会返回 true: 判断其中一方是否为 string ,在与 number进行比较 ...

  2. BSOJ6310题解

    互不相同,太困难啦!!!!!! 考虑可以相同的情况.可以容斥. \[ans=(1+1+1+1)-(2+1+1)+(3+1)+(2+2)-(4) \] 有点抽象,看看就好() \[ans=(a,b,c, ...

  3. web自动化之selenium(六)利用坐标点定位

    这是通过第三发库实现对元素的定位,因为在无法定位元素的时候,只能通过外部来定位,此时就可以使用pyautogui模块,操作鼠标,模拟人进行操作 # 使用注意事项,不要过于的依赖它 1.使用时需要在通过 ...

  4. vue js计算精度问题处理,兼容XP系统

    js计算精度问题(浮点数误差,大数计算出错) JavaScript 运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果. 网上教程一大篇,原理请百度,抄作业往下看!! ...

  5. Linux环境下安装配置JDK1.8

    最近在搞虚拟机,记录下虚拟机内java环境的搭建流程 一.下载合适版本的jdk 此处选择JDK1.8,各位同学可以根据自己的需求选择对应的版本,下载地址为: https://www.oracle.co ...

  6. [Java编程思想] 第二章 一切都是对象

    第二章 一切都是对象 2.1 用引用操纵对象   创建一个String引用: String s;   这里所创建的只是引用,并不是对象.   创建一个引用的同时便初始化: String s = &qu ...

  7. virtualenv和virtualenvwrapper pipenv安装

    virtualenv和virtualenvwrapper pipenv安装 virtualenvwrapper工具 virtualenvwrapper是用来管理virtualenv的扩展包,用着很方便 ...

  8. 内网渗透----Token 窃取与利用

    0x00 前言 在之前的文章<渗透技巧--程序的降权启动>介绍了使用 SelectMyParent 降权的方法,本质上是通过 token 窃取实现的.这一次将要对 token 窃取和利用做 ...

  9. 老徐和阿珍的故事:CAP是什么?超级爱放P吗?

    人物背景: 老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐.据说之前炒某币败光了所有家产,甚至现在还有欠债. 阿珍,女,本名陈家珍,刚 ...

  10. 【flareon6】 overlong-通过动调改内存修改程序

    程序分析 无壳,32位程序 运行后结果 程序比较简单一共三个函数 根据题目和运行结果可以看出来是a3太小了,没法完全解密密钥 解决该问题可以通过写脚本或动调解决 方法一:动调改内存 定位到a3入栈的位 ...