从互相了解对方的代码思路然后确定用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. 微信小程序搜索并高亮关键字

    更多解读可使用博客: https://www.jianshu.com/p/86d73745e01c 实现流程:1.在文本框中输入关键字key,如"比赛",检索出比赛相关的列表key ...

  2. MYSQL数年库安装

    MySQL系列 MySQL 的三大主要分支mysqlmariadbpercona Server MySQL系列2.2.2.1 MySQL 的三大主要分支mysqlmariadbpercona Serv ...

  3. VuePress 博客之 SEO 优化(二)重定向

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  4. django的request对象方法初识

    1:request.post 拿到的是post请求发送过来的数据,可以将其看作是一个个的键值对 使用get方法可以通过key拿到值,如果该值是一个列表的话,get方法只能拿到列表的最后一个值,使用ge ...

  5. vue3-异步组件的使用

    我们通常会在实际开发中,将项目进行分包处理,以此加快项目的速度 即使用异步组件 //异步组件,分包处理 import {defineAsyncComponent} from "vue&quo ...

  6. ArcMap操作随记(2)

    1.空间校正 变换-仿射 仅发生偏移 橡皮页变化 形状改变 变换-投影 旋转,改变角度 变换-相似 改变大小.形状不变 2.计算行列号 Int(([POINT_Y]-1273.143242)/30)+ ...

  7. 2022 年最受瞩目的新特性 CSS @layer 到底是个啥?

    步入 2022,CSS 的新特性层出不穷,而最近在 CSS 圈最受瞩目的新特性,非 CSS @layer 莫属. 本文,将用最简洁的语言,快速让读者们搞懂,到底什么是 CSS @layer 新规范. ...

  8. 4月9日 python学习总结 模块

    1.XML模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融 ...

  9. RDMA--libibverbs代码分析(2)-设备发现

    基于上一篇文章https://www.cnblogs.com/xingmuxin/p/11057845.html 我们现在从分析libibverbs代码,跳入到分析内核代码,代码位置在./driver ...

  10. Java多线程之线程同步【synchronized、Lock、volatitle】

    线程同步 线程同步:当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多. ...