2020系统综合实践 第8次实践作业
1、选题简介
选题名称
人脸打卡系统
预期结果
本次选题基于一个日常打卡应用,需求为:管理员根据企业密码注册,录入员工信息,查看员工打卡情况。员工能进行每日打卡。
2、系统部署所使用的容器
参考我第4次博客
-
项目结构
-
dockerfile for mysql
from mysql:5.7
#基础镜像
maintainer lyh<471727250@qq.com>
#维护者信息
ENV MYSQL_ALLOW_EMPTY_PASSWORD no
#不允许空密码登录
ENV MYSQL_ROOT_PASSWORD=123456
#root密码
COPY setup.sh /usr/lyh/suancaiyu/mysql/setup.sh
COPY schema.sql /usr/lyh/suancaiyu/mysql/schema.sql
#所需文件
CMD ["sh", "/usr/lyh/suancaiyu/mysql/setup.sh"]
#启动命令
-
dockerfile for tomcat
#基础镜像
FROM tomcat
#作者信息
MAINTAINER lyh<471727250@qq.com>
#改时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
-
dockerfile for nginx
#基础镜像
FROM nginx
#作者信息
MAINTAINER lyh<471727250@qq.com>
#声明暴露的端口
EXPOSE 2020
-
default.conf for nginx
#轮询实现负载均衡
upstream tomcats {
server tomcat1:8080 weight=1;
server tomcat2:8080 weight=1;
server tomcat3:8080 weight=1;
}
server {
listen 2020;
server_name localhost;
location / {
proxy_pass http://tomcats; # 请求转向tomcats
}
proxy_read_timeout 240s;
}
3、运行结果
后端结果:
使用sudo docker-compose up -d --build
命令运行容器
、
查看各容器日志:
sudo docker logs suancaiyu_mysql
sudo docker logs tomcat1
sudo docker logs tomcat2
sudo docker logs tomcat3
sudo docker logs suancaiyu_ngx
前端结果:
主界面
打卡界面
打卡确认界面
打卡状态界面
管理员登录界面
管理员注册界面
管理员界面
录入员工界面
打卡状态查询界面(三个界面类似,这里只展示一个)
员工信息界面
删除员工界面
月打卡汇总界面
其他风格(功能完全相同,只是界面样子不一样)
4、分工情况
成员 | 分工 | 贡献比 |
---|---|---|
林郁昊 | 后端开发,后端docker环境部署,接口测试 | 33 |
黄宇航 | 人脸识别代码的修改,前后端对接,录屏测试,部分素材收集 | 32 |
胡浩楠 | 图形化界面的设计与实现,数据格式处理,部分素材收集 | 35 |
5、总结
林郁昊
在本次的实验中我负责后端开发,后端docker环境部署,接口测试,其实自己写代码的过程还是比较轻松的,难的是部署与接口测试。在自己的电脑上直接运行的参数与阿里云服务器上不大一样,有一些端口还需要额外开通,比如“一键喝茶”这个功能,需要开启25端口,然后阿里云25端口开放申请失败,最后只好开另一个端口来发邮件。还有件事打卡十分重要的时区问题,阿里云上构建docker容器,容器的时区不一致,所以需要在dockerfile中加参数,包括mysql中的时区。部署花的时间与编码都要几乎一致了。最后感谢队友们的互相配合,做项目的过程还是很愉快的。
黄宇航
在本次的实验中我负责人脸识别代码修改和前后端对接的任务,一开始发现源代码需要将识别图片先加载好,和人脸识别打卡中录入类似,于是写了扫面文件夹和读取图片的函数来解决这一个问题,其次就是前后端对接,起初用Json文件向服务器post文件来获取对应信息,发现服务器并不支持json文件的解析,于是只好用简单的request.get来请求数据再将数据进行处理,同时也非常感谢队友对我的支持和帮助。
胡浩楠
在本次的实验中我负责图形化界面这一部分,一开始是想用pyqt5实现图形化界面,界面可能会比较美观,而且pyqt5比较方便,拖动控件即可完成布置,但是由于时间比较紧张,从0开始学习pyqt5的时间不太够,再考虑到系统的兼容性,我最终还是决定使用python基础的tkinter图形界面库。tkinter这个库之前在其他课程中有用过,比较简单,可移植性好,但是界面要设计的比较好看是不容易的,因为控件就那么十几种,而且有很大的局限性,因此我就想尽量把界面做的功能比较全,比较友好。打卡应用是讲究实时性的,所以界面上显示的信息都是动态获取的,包括日历、时间、天气,这些还用到了爬虫的一些知识。在管理员注册和员工录入方面上,为了显示出添加的图片,这部分的逻辑我也是下了不少功夫,关键点有两个,第一个是录入照片时,怎样知道员工信息和这个照片匹配,这部分我就是想员工在输入工号后,获取工号后并把照片以工号命名,第二点是注册时显示的图片大小格式要限制,但是限制了大小后,图片会变形,如果发生比较严重的变形就会影响识别的准确性,因此我设了两个文件夹,一个文件夹保存原图片(不变形),打卡扫描的时候是读入这个文件夹的图片,另一个保存添加照片时显示的图片,这部分图片仅用来显示,会变形,但是对识别没有影响。在查询或者汇总的显示时,利用到了PrettyTable这个库,使查询结果的格式就像数据库中的格式一样,美观一些。另外一键喝茶(提醒未打卡或迟到过多的员工)这个功能我觉得比较有新意,可以去提醒那些工作态度不端正的员工。在本次实验中学到了很多的知识,并且锻炼了自己的逻辑,学习怎样去设计实现对用户比较友好的界面,这也是我第一次去写一个比较完善的图形化界面。当然,图形化界面离不开前端和后端的支持,也非常感谢队友对我的支持和帮助。