带UI的小初高数学学习软件—艰难地用C++(QT库)实现的过程
从互相了解对方的代码思路然后确定用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
至此。项目小初高数学学习软件完工。

一点点经验:
- 有问题别退缩,迎难而上,但也要适当的另辟蹊径,就像简单的用c++调用java程序而避开了不提供c++接口无法发送短信的问题。
- 谷歌百度多多益善。不管做什么,问题肯定是有的,多多使用百度,百度不到用谷歌,将大问题细化为几个小问题再逐个击破。
- 多精一门语言。别怀里抱着c++当宝贝,热度排前的python、java为何不好好学学呢?
带UI的小初高数学学习软件—艰难地用C++(QT库)实现的过程的更多相关文章
- 结对编程——带UI的小初高数学学习软件
一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...
- 带UI的小初高数学学习软件
结对编程项目总结 一.项目需求分析与功能总结 (1)用户注册功能 用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册. (2)设置密码功能 密码6-10位,必须含大小写字母和数 ...
- 结对编程项目复盘:带UI的小初高数学学习软件
实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...
- 带UI 的小初高数学学习系统 —结对编程项目总结
一. 项目综述 本系统是基于QT Creator 4.3.0开发环境,开发语言C++,能够实现用户注册,发送短信验证码,用户登陆,用户选择题目类型和数量,显示用户本次答题基本功能.支持对用户账号查重, ...
- HNU_小初高数学学习软件_功能说明
结对编程项目主要功能: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-1 ...
- HNU_小中初数学学习软件(可视化编程)_结对项目总结与体会
前言 经过将近一周的共同努力,HnuLyx和我终于完成了项目,期间心酸苦辣,受益良多,请允许我一一道来. 问题(需求要求的
- 小C的数学问题 【单调栈】
问题 J: 小C的数学问题 时间限制: 1 Sec 内存限制: 128 MB 提交: 565 解决: 141 [提交] [状态] [命题人:外部导入] 题目描述 小C是个云南中医学院的大一新生,在 ...
- JAVA小项目实例源码—学习娱乐小助手
代码地址如下:http://www.demodashi.com/demo/11456.html 一.程序实现 项目目录: MyJFrame:实现项目界面样式: AppProcess:实现调用api或爬 ...
- 微信小程序开发:学习笔记[4]——样式布局
微信小程序开发:学习笔记[4]——样式布局 Flex布局 新的布局方式 在小程序开发中,我们需要考虑各种尺寸终端设备上的适配.在传统网页开发,我们用的是盒模型,通过display:inline | b ...
随机推荐
- BSOJ6387题解
算是刷新了我对树上问题的认知 首先第一问随便做一个 \(O(nk)\) 的 DP 就可以草过去,考虑第二问. 我们将问题分为两个部分:走儿子边的答案和走父亲边的答案.最后拼接一下就好了. 设 \(fd ...
- 《shader入门精要》13.2再谈运动模糊中片元着色器的世界坐标的计算
具体在书p275页 这里为啥需要除D.w呢. 首先我们得到的NDC的坐标是已经归一化的,但是CurrenViewProjectionMatrix的作用,是把世界空间转化为尚未归一化的裁剪空间. 这里看 ...
- Golang 常见设计模式之装饰模式
想必只要是熟悉 Python 的同学对装饰模式一定不会陌生,这类 Python 从语法上原生支持的装饰器,大大提高了装饰模式在 Python 中的应用.尽管 Go 语言中装饰模式没有 Python 中 ...
- wordpress在线检测主题和插件
http://wpthemedetector.coderschool.cn/ http://www.wpthemedetector.com/ http://whatwpthemeisthat.com ...
- Rsync反弹shell
vulhub环境靶机 : 192.168.91.130 攻击机:kali 192.168.91.128 一.环境搭建 vulhub环境靶机环境搭建 在纯净ubuntu中部署vulhub环境: 1. ...
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
对. 因为equals()方法可以用开发者重写,hashCode()方法也可以由开发者来重写,因此它们是否相等并没有必然的关系. 如果对象要保存在HashSet或HashMap中,它们的equals( ...
- java中的ThreadLocal-learning
为什么需要ThreadLocal 多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性. 而线程安全是指 当多个线程访问某个方法时 ...
- java-servlet-cookie&sessions
http协议是无状态协议 无状态协议的意思是服务端与客户端不会记录任何一次通信的信息 服务端"和"客户端",虽然见过很多面,但每次见面仍还是认不出对方,都是陌生人. 但 ...
- java-Map集合hei
/* Map集合的特点: Map集合市一个双列集合,一个元素包含两个值:一个key,一个value Map集合中的元素,key和value的数据类型可以相同,也可以不同 Map集合中的元素,key不允 ...
- MyBatis 实现一对一有几种方式?具体怎么操作的?
有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在 resultMap 里面配置 association 节点配置一对一的类就可以完成: 嵌套查询是先查一个表,根据这个表里面的结果的 ...