web版"凑发票计算器"经验总结

故事背景

公司一直有这样的报销传统:每个月加班一天报销25块钱,但是必须提供相应的发票。发票的规定有点奇葩,不能少于报销金额,但是也不能多余报销金额+30.举个例子,比如一个月加班10天,那么可以报销的金额是250元,需要提供的发票金额加起来必须在250-280之间。

旁边的同事每个月都能搞到好多发票,各个金额都有。但是每次为了把这些发票凑成合适的数字,都要花一些时间。

由此想到,如果要是能写个代码,来完成这项工作就好了。

这就是想写一个“发票计算器”的动机。

开发思路

对于这种需求来说,最核心的部分肯定是写一个正确、完善的凑数字的程序。
基本需求就是,有一组数,看他们有否任意组合,满足凑成和在某个区间内的条件。
再之后,可以简化为,对于一个数组,写出所有下标的组合。
列出来所有组合之后,在逐一组合检查是否满足“凑和”的条件。

于是问题转换为,给一个数组,列出来所有下标的组合。

起初想用c++ 来写这个小工具,用 QT 套个壳。但是后来考虑到 QT 发布 exe 不知道要趟多少缺少 dll 的坑,并且总不能谁需要就给谁手动拷贝个 exe,非常不利于推广传播。

因此,最终决定开发在 web平台,算法和界面都用 javascript 来写.最终把结果部署在我个人的服务器上。

这样就比较方便使用、利于传播了

经验总结

关于web平台

由于个人对 web 平台 javascript 操作 dom不太熟悉,因此照着 w3school一点点写了个简陋的界面。尝试用 js 动态添加、删除 div.整个过程比想象的要顺利得多。

并没有采用 jQuery 以及各种前端框架,纯手撸 html 和 javascript.

整体感觉下来,跟给游戏写 ui 思路几乎一样,甚至更简单一些。

关于算法

算法本身比我想象得要复杂。我把我自己的思路写到了代码的注释里面。
可能远远达不到“最优解”,但是确实已经穷尽自己的智力极限了。

困难之处在于,由于得考虑各种各样的组合,可能有两个的组合,3个的组合,N个的组合。也就是说如果遍历的话,可能需要写的遍历的层数是动态的。

这样一来很容易就会想到递归求解。

但是及时想到了递归,依然没有能够快速把代码写出来。

这里我就图省事儿直接上图吧。
凑发票算法图解

打包发布时遇到的问题

最终结果出来,本地测试运行良好.部署到我腾讯云的 CentOS服务器上时,遇到了两个小问题。

  1. 如何把本地文件上传到服务器

  2. 上传到服务器之后,原本正常的 html 网页方问竟然是乱码

成果展示

各种边界条件都有处理,比如没有输入发票、输入发票没有解法时,都有对应的处理。
唯一已知但是没有处理的是输入没有屏蔽非数字。
结果在这个链接

http://gj1111myl.cn/receipt

本来想贴一下代码,但其实一共个3个文件,代码也没有加密。 chrome 浏览器打开上面的地址,直接用开发者工具就能看到了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值