该项目纯软件
目前是一个网站的形式来实现学习强国打卡,当初设计是为了提高统计的准确性,以及方便每周值日的同学观看打卡情况,产生做这个系统的想法,目前已经投入使用
系统架构
系统架构是基于MVC开发模式拓展的,包括database数据层、model模型层、dao数据持久层、service业务逻辑层、controller/servlet控制器,各层次分工明确,降低层次耦合度。
显示层 (View)
本系统采用B/S模式。多以jsp/html为主要的显示页面,为了满足页面UI的展示,AJAX数据交换为JSON格式。此层与控制层结合比较紧密,需要二者结合起来协同工作。
控制层
Controller层负责具体的业务模块流程的控制,这样不仅使程序结构变得清晰,也大大减少了代码量。
控制层主要用于响应客户端请求,每当请求到系统时,控制层就会调用对应的业务逻辑。请求分多种,如AJAX的数据请求、页面请求、文件上传、文件下载,控制层便会对应地做出相应的数据返回、页面跳转、流返回行为。
数据持久层
DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后设计实现类。
各层联系
DAO层,可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势,Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之间我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
下图为目前网站功能架构
码云下载地址,直接点击这里,这个代码还是之前有bug时候的代码,看懂里面代码并作相应的修改就会有很大的成长。
这里代码是使用以下软件来进行开发的:开发工具:MyEclipse10,数据库:MySQL 5.1.32-community,图形化界面数据库操作:navicat,Java环境:jdk1.8.0_131(实际可能是jdk6,MyEclipse创建项目时候最高版本)
后来我用eclipse来开发,在myeclipse里那个jdk6换成高版本,一堆叉叉,不换高版本jdk图像处理那里请求的file类那些又没有(具体没有哪些类我忘记了,idea没用过所以没有用),反正看着就很不爽。或者两种jdk存在,导致部分代码出bug;像不执行识别代码什么的。
上述bug
- 打卡天数,到达99天的时候,加到100,就一直查99天的数据进行修改
打卡天数的流程及实现思路
- 在积分录入界面,填好分数那些,或者上传图片等待识别,输入框有内容后,点击上传,打卡天数自增
- 打卡天数,个人设计是通过时间的比较来进行实现的,注册时候会自动记录注册时间,接着打卡就通过与注册时间作比较来计算打卡天数
三种情况:
- 注册当天打卡
- 注册当天没打卡
- 注册后打过卡
- 具体应结合代码进行看
bug出现的原因是当时设计数据库打卡天数时候,数据类型是varchar(255),然后大家到99天的时候,代码总是判断99为最大的天数。我也懒得改数据库那里设计了,我个人解决这个bug的思路是(判断里面的最新的打卡编号,因为打卡编号自增且数据类型为int)。写到这里,想到支部打卡天数的貌似也是varchar类型,这个我有空再改吧
部署在服务器上的bug就精彩多了
本地入数据库没问题,服务器上传中文入数据库就乱码(db.properties里面加useUnicode=true&characterEncoding=UTF-8,解决问题)问题解决链接
-
tomcat7版本 jdk只有1.7,图像处理的那些算法不能用,如图报错
tomacat8版本终于可以了jdk1.8,结果录入的感想全 ?????(乱码),一查发现tomcat8直接帮你处理好字符的问题 直接默认UTF-8,而我里面的方法为了tomcat7版本转码成ISO-8859-1。后面我决定不改代码,因为懒,太多代码要删删改改调试,于是决定直接浪费tomcat8的美意,把编码改成ISO-8859-1。问题解决链接
4.最精彩部分莫过于这个了。我开发用windows系统,存储目录路径如图 是正斜杠“\”
然而实际的服务器是Linux系统(怪我看在Linux系统占服务器空间小,所以选择了Linux,否则就不会出现这么精彩的问题了),先看看不改代码放服务器的情况(可看下图) img\学号\图片名 (惊喜加意外,就新建了一个奇奇怪怪的文件夹还不能访问),接下来来看服务器实际存储路径 如图 是反斜杠“/”,如此一来存储就出现问题,解决方法改成正斜杠改成反斜杠
待提升的地方
积分界面,关于打卡天数可加一个应打卡天数来进行与实际打卡天数作对比。这部分代码方法其实我个人写了,但实际写在前端的时候出现了一点点小问题,现在还不怎么想解决,先凉拌着(不知道咋解决)。
这个网站其实可以转化为微信小程序的形式进行打卡,有能力的同学或者想要拥有这能力的同学可以借鉴我后端写的数据库结构、代码啥的,或者直接将后端的方法链接微信小程序的界面来实现。大佬可以忽略,直接按需开发
图像处理我这里实现是使用别人提供的api,图片数据根据支部的一些图片还有自己实际手机的截图,识别准确率我个人觉得其实可以,识别速率写了延迟3s请求,真正体验有时需要反复上传几次才能识别出来(说实话我还是挺不满意的,没有识别出来会返回上一位识别成功的同学的数据,这是由于我用了个中间变量来存储数据,也算个bug待解决。当时写到崩溃,终于解决识别存数据不入库的方法,后面就有点懒不想写清空上位识别成功数据的代码)
图像处理这部分,有能力其实可以自己写,自己训练识别字库,来提升识别率和准确率(这部分是我目前不具备的能力),现在有些用户用了自己的字体识别不出来,由于是用api,所以并不能解决这个问题
可以加上会议签到等功能,考勤汇总什么的就没有那么辛苦,本人不是很想一个人完成这些所有功能,实在太累了,就交给后面的大佬来实现了
最后附上当时想做成小程序的供需分析
(我分析了然后,为什么自己不做呢,是由于,我还不想花时间去研究get/post请求与小程序界面的链接,决定简化自己操作,用自己已知大部分的知识缩短开发时间,所以就写了个网站)
上述书于2020.11.03,若有补充后续再说