web版凑发票计算器经验总结
故事背景
公司一直有這樣的報(bào)銷傳統(tǒng):每個(gè)月加班一天報(bào)銷25塊錢,但是必須提供相應(yīng)的發(fā)票。發(fā)票的規(guī)定有點(diǎn)奇葩,不能少于報(bào)銷金額,但是也不能多余報(bào)銷金額+30.舉個(gè)例子,比如一個(gè)月加班10天,那么可以報(bào)銷的金額是250元,需要提供的發(fā)票金額加起來必須在250-280之間。
旁邊的同事每個(gè)月都能搞到好多發(fā)票,各個(gè)金額都有。但是每次為了把這些發(fā)票湊成合適的數(shù)字,都要花一些時(shí)間。
由此想到,如果要是能寫個(gè)代碼,來完成這項(xiàng)工作就好了。
這就是想寫一個(gè)“發(fā)票計(jì)算器”的動(dòng)機(jī)。
開發(fā)思路
對于這種需求來說,最核心的部分肯定是寫一個(gè)正確、完善的湊數(shù)字的程序。
基本需求就是,有一組數(shù),看他們有否任意組合,滿足湊成和在某個(gè)區(qū)間內(nèi)的條件。
再之后,可以簡化為,對于一個(gè)數(shù)組,寫出所有下標(biāo)的組合。
列出來所有組合之后,在逐一組合檢查是否滿足“湊和”的條件。
于是問題轉(zhuǎn)換為,給一個(gè)數(shù)組,列出來所有下標(biāo)的組合。
起初想用c++ 來寫這個(gè)小工具,用 QT 套個(gè)殼。但是后來考慮到 QT 發(fā)布 exe 不知道要趟多少缺少 dll 的坑,并且總不能誰需要就給誰手動(dòng)拷貝個(gè) exe,非常不利于推廣傳播。
因此,最終決定開發(fā)在 web平臺,算法和界面都用 javascript 來寫.最終把結(jié)果部署在我個(gè)人的服務(wù)器上。
這樣就比較方便使用、利于傳播了
經(jīng)驗(yàn)總結(jié)
關(guān)于web平臺
由于個(gè)人對 web 平臺 javascript 操作 dom不太熟悉,因此照著 w3school一點(diǎn)點(diǎn)寫了個(gè)簡陋的界面。嘗試用 js 動(dòng)態(tài)添加、刪除 div.整個(gè)過程比想象的要順利得多。
并沒有采用 jQuery 以及各種前端框架,純手?jǐn)] html 和 javascript.
整體感覺下來,跟給游戲?qū)?ui 思路幾乎一樣,甚至更簡單一些。
關(guān)于算法
算法本身比我想象得要復(fù)雜。我把我自己的思路寫到了代碼的注釋里面。
可能遠(yuǎn)遠(yuǎn)達(dá)不到“最優(yōu)解”,但是確實(shí)已經(jīng)窮盡自己的智力極限了。
困難之處在于,由于得考慮各種各樣的組合,可能有兩個(gè)的組合,3個(gè)的組合,N個(gè)的組合。也就是說如果遍歷的話,可能需要寫的遍歷的層數(shù)是動(dòng)態(tài)的。
這樣一來很容易就會(huì)想到遞歸求解。
但是及時(shí)想到了遞歸,依然沒有能夠快速把代碼寫出來。
這里我就圖省事兒直接上圖吧。
打包發(fā)布時(shí)遇到的問題
最終結(jié)果出來,本地測試運(yùn)行良好.部署到我騰訊云的 CentOS服務(wù)器上時(shí),遇到了兩個(gè)小問題。
如何把本地文件上傳到服務(wù)器
上傳到服務(wù)器之后,原本正常的 html 網(wǎng)頁方問竟然是亂碼
成果展示
各種邊界條件都有處理,比如沒有輸入發(fā)票、輸入發(fā)票沒有解法時(shí),都有對應(yīng)的處理。
唯一已知但是沒有處理的是輸入沒有屏蔽非數(shù)字。
結(jié)果在這個(gè)鏈接
http://gj1111myl.cn/receipt
本來想貼一下代碼,但其實(shí)一共個(gè)3個(gè)文件,代碼也沒有加密。 chrome 瀏覽器打開上面的地址,直接用開發(fā)者工具就能看到了。
總結(jié)
以上是生活随笔為你收集整理的web版凑发票计算器经验总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产品经理书单:《大数据时代:生活、工作与
- 下一篇: 如何使用OneNote和draw.io来