該項目純軟件
目前是一個網(wǎng)站的形式來實現(xiàn)學(xué)習(xí)強(qiáng)國打卡,當(dāng)初設(shè)計是為了提高統(tǒng)計的準(zhǔn)確性迄埃,以及方便每周值日的同學(xué)觀看打卡情況蟀架,產(chǎn)生做這個系統(tǒng)的想法,目前已經(jīng)投入使用
系統(tǒng)架構(gòu)
系統(tǒng)架構(gòu)是基于MVC開發(fā)模式拓展的慧域,包括database數(shù)據(jù)層鲤竹、model模型層、dao數(shù)據(jù)持久層昔榴、service業(yè)務(wù)邏輯層辛藻、controller/servlet控制器碘橘,各層次分工明確,降低層次耦合度吱肌。
顯示層 (View)
本系統(tǒng)采用B/S模式痘拆。多以jsp/html為主要的顯示頁面,為了滿足頁面UI的展示氮墨,AJAX數(shù)據(jù)交換為JSON格式纺蛆。此層與控制層結(jié)合比較緊密,需要二者結(jié)合起來協(xié)同工作规揪。
控制層
Controller層負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制桥氏,這樣不僅使程序結(jié)構(gòu)變得清晰,也大大減少了代碼量粒褒。
控制層主要用于響應(yīng)客戶端請求识颊,每當(dāng)請求到系統(tǒng)時,控制層就會調(diào)用對應(yīng)的業(yè)務(wù)邏輯奕坟。請求分多種祥款,如AJAX的數(shù)據(jù)請求、頁面請求月杉、文件上傳刃跛、文件下載,控制層便會對應(yīng)地做出相應(yīng)的數(shù)據(jù)返回苛萎、頁面跳轉(zhuǎn)桨昙、流返回行為。
數(shù)據(jù)持久層
DAO層主要是做數(shù)據(jù)持久層的工作腌歉,負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行聯(lián)絡(luò)的一些任務(wù)都封裝在此蛙酪,DAO層的設(shè)計首先是設(shè)計DAO的接口,然后設(shè)計實現(xiàn)類翘盖。
各層聯(lián)系
DAO層桂塞,可以單獨開發(fā),互相的耦合度很低馍驯,完全可以獨立進(jìn)行阁危,這樣的一種模式在開發(fā)大項目的過程中尤其有優(yōu)勢,Controller汰瘫,View層因為耦合度比較高狂打,因而要結(jié)合在一起開發(fā),但是也可以看作一個整體獨立于前兩個層進(jìn)行開發(fā)混弥。這樣趴乡,在層與層之間我們只需要知道接口的定義,調(diào)用接口即可完成所需要的邏輯單元應(yīng)用,一切顯得非常清晰簡單浙宜。
下圖為目前網(wǎng)站功能架構(gòu)
碼云下載地址官辽,直接點擊這里蛹磺,這個代碼還是之前有bug時候的代碼粟瞬,看懂里面代碼并作相應(yīng)的修改就會有很大的成長。
這里代碼是使用以下軟件來進(jìn)行開發(fā)的:開發(fā)工具:MyEclipse10萤捆,數(shù)據(jù)庫:MySQL 5.1.32-community裙品,圖形化界面數(shù)據(jù)庫操作:navicat,Java環(huán)境:jdk1.8.0_131(實際可能是jdk6俗或,MyEclipse創(chuàng)建項目時候最高版本)
后來我用eclipse來開發(fā)市怎,在myeclipse里那個jdk6換成高版本,一堆叉叉辛慰,不換高版本jdk圖像處理那里請求的file類那些又沒有(具體沒有哪些類我忘記了区匠,idea沒用過所以沒有用),反正看著就很不爽帅腌〕叟或者兩種jdk存在,導(dǎo)致部分代碼出bug速客;像不執(zhí)行識別代碼什么的戚篙。
上述bug
- 打卡天數(shù),到達(dá)99天的時候溺职,加到100岔擂,就一直查99天的數(shù)據(jù)進(jìn)行修改
打卡天數(shù)的流程及實現(xiàn)思路
- 在積分錄入界面,填好分?jǐn)?shù)那些浪耘,或者上傳圖片等待識別乱灵,輸入框有內(nèi)容后,點擊上傳七冲,打卡天數(shù)自增
- 打卡天數(shù)痛倚,個人設(shè)計是通過時間的比較來進(jìn)行實現(xiàn)的,注冊時候會自動記錄注冊時間癞埠,接著打卡就通過與注冊時間作比較來計算打卡天數(shù)
三種情況:
- 注冊當(dāng)天打卡
- 注冊當(dāng)天沒打卡
- 注冊后打過卡
- 具體應(yīng)結(jié)合代碼進(jìn)行看
bug出現(xiàn)的原因是當(dāng)時設(shè)計數(shù)據(jù)庫打卡天數(shù)時候状原,數(shù)據(jù)類型是varchar(255),然后大家到99天的時候苗踪,代碼總是判斷99為最大的天數(shù)颠区。我也懶得改數(shù)據(jù)庫那里設(shè)計了,我個人解決這個bug的思路是(判斷里面的最新的打卡編號通铲,因為打卡編號自增且數(shù)據(jù)類型為int)。寫到這里,想到支部打卡天數(shù)的貌似也是varchar類型朋截,這個我有空再改吧
部署在服務(wù)器上的bug就精彩多了
本地入數(shù)據(jù)庫沒問題蛹稍,服務(wù)器上傳中文入數(shù)據(jù)庫就亂碼(db.properties里面加useUnicode=true&characterEncoding=UTF-8,解決問題)問題解決鏈接
-
tomcat7版本 jdk只有1.7部服,圖像處理的那些算法不能用唆姐,如圖報錯
tomacat8版本終于可以了jdk1.8,結(jié)果錄入的感想全 廓八?奉芦??剧蹂?声功?(亂碼),一查發(fā)現(xiàn)tomcat8直接幫你處理好字符的問題 直接默認(rèn)UTF-8宠叼,而我里面的方法為了tomcat7版本轉(zhuǎn)碼成ISO-8859-1先巴。后面我決定不改代碼,因為懶冒冬,太多代碼要刪刪改改調(diào)試伸蚯,于是決定直接浪費tomcat8的美意,把編碼改成ISO-8859-1窄驹。問題解決鏈接
4.最精彩部分莫過于這個了朝卒。我開發(fā)用windows系統(tǒng),存儲目錄路徑如圖 是正斜杠“\”
然而實際的服務(wù)器是Linux系統(tǒng)(怪我看在Linux系統(tǒng)占服務(wù)器空間小乐埠,所以選擇了Linux抗斤,否則就不會出現(xiàn)這么精彩的問題了),先看看不改代碼放服務(wù)器的情況(可看下圖) img\學(xué)號\圖片名 (驚喜加意外丈咐,就新建了一個奇奇怪怪的文件夾還不能訪問)瑞眼,接下來來看服務(wù)器實際存儲路徑 如圖 是反斜杠“/”,如此一來存儲就出現(xiàn)問題棵逊,解決方法改成正斜杠改成反斜杠
待提升的地方
積分界面伤疙,關(guān)于打卡天數(shù)可加一個應(yīng)打卡天數(shù)來進(jìn)行與實際打卡天數(shù)作對比。這部分代碼方法其實我個人寫了辆影,但實際寫在前端的時候出現(xiàn)了一點點小問題徒像,現(xiàn)在還不怎么想解決,先涼拌著(不知道咋解決)蛙讥。
這個網(wǎng)站其實可以轉(zhuǎn)化為微信小程序的形式進(jìn)行打卡锯蛀,有能力的同學(xué)或者想要擁有這能力的同學(xué)可以借鑒我后端寫的數(shù)據(jù)庫結(jié)構(gòu)、代碼啥的次慢,或者直接將后端的方法鏈接微信小程序的界面來實現(xiàn)旁涤。大佬可以忽略翔曲,直接按需開發(fā)
圖像處理我這里實現(xiàn)是使用別人提供的api,圖片數(shù)據(jù)根據(jù)支部的一些圖片還有自己實際手機(jī)的截圖劈愚,識別準(zhǔn)確率我個人覺得其實可以瞳遍,識別速率寫了延遲3s請求,真正體驗有時需要反復(fù)上傳幾次才能識別出來(說實話我還是挺不滿意的菌羽,沒有識別出來會返回上一位識別成功的同學(xué)的數(shù)據(jù)掠械,這是由于我用了個中間變量來存儲數(shù)據(jù),也算個bug待解決算凿。當(dāng)時寫到崩潰份蝴,終于解決識別存數(shù)據(jù)不入庫的方法,后面就有點懶不想寫清空上位識別成功數(shù)據(jù)的代碼)
圖像處理這部分氓轰,有能力其實可以自己寫,自己訓(xùn)練識別字庫浸卦,來提升識別率和準(zhǔn)確率(這部分是我目前不具備的能力)署鸡,現(xiàn)在有些用戶用了自己的字體識別不出來,由于是用api限嫌,所以并不能解決這個問題
可以加上會議簽到等功能靴庆,考勤匯總什么的就沒有那么辛苦,本人不是很想一個人完成這些所有功能怒医,實在太累了炉抒,就交給后面的大佬來實現(xiàn)了
最后附上當(dāng)時想做成小程序的供需分析
(我分析了然后,為什么自己不做呢稚叹,是由于焰薄,我還不想花時間去研究get/post請求與小程序界面的鏈接,決定簡化自己操作扒袖,用自己已知大部分的知識縮短開發(fā)時間塞茅,所以就寫了個網(wǎng)站)
上述書于2020.11.03,若有補充后續(xù)再說