《基于python的考勤系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于python的考勤系统的设计与实现.docx(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、摘要现如今中国在校大学生人数是10年前的10倍还有余,在校大学生人数达到了2831.17万人,随着人数的增多,问题也随之产生,比如同一节课的人数也稳固上升,这就给老师的上课考勤带来了非常大的难题,以往我们的经验是点名达到,随着人数的不断增加,这种方式显然存在繁重的弊端,因此我们设计的“Python学生考勤系统”就十分重要。针对现如今的问题,我本人设计并实现了一款“Python学生考勤系统”就可以解决学生人数增加带来上课考勤困难的问题。并且还拥有发布信息和回复的功能,以及学生因事请假并说明原因等功能。这个系统使用了当今python框架中如日中天的Django框架,使用了MTV结构,能够最大程度的
2、简洁清晰的了解后端结构作用易于维护。前端使用了Bootstrap框架来实现美观简洁的前端界面,让学生易于操作和使用,使用了Mysql数据库,并使用Navicate软件来连接使用。关键词:Django MTV Bootstrap mysql Navicate AbstractNow the number of college students in China is more than 10 times that of 10 years ago. The number of college students has reached 28.311 million. As the number of
3、 students increases, problems also arise. For example, the number of students in the same class has also risen steadily. This has caused a very difficult problem for the teachers attendance. In the past, our experience was to achieve a roll call. With the continuous increase of the number of people,
4、 this method obviously has heavy drawbacks. Therefore, the Python student attendance system we designed is very important.In view of the current problems, I have designed and implemented a Python student attendance system to solve the problem of attendance problems caused by the increase in the numb
5、er of students. And also has the function of releasing information and reply, as well as the function of asking for leave and explaining the reasons.This system uses the Django framework in the current Python framework, uses the MTV structure, and can understand the function of the back-end structur
6、e to the greatest extent succinctly and clearly, which is easy to maintain. The front-end uses bootstrap framework to realize beautiful and simple front-end interface, which makes students easy to operate and use. MySQL database is used and navicate software is used to connect and use.Key Words:Djan
7、go MTV Bootstrap mysql Navicate 广东东软学院本科生毕业设计(论文) 目 录1.绪论12.开发工具和技术简介22.1设计目标32.2 研究方法32.3项目中涉及的技术32.3.1 Django框架32.3.2 Bootstrap前端框架32.3.3 MTV框架模式42.3.4 MTV与MVC42.4设备要求53.系统需求分析53.1需求规格63.1.1系统的构成部分63.1.2功能性需求63.1.3非功能性需求103.2开发环境的选择114.系统设计114.1总体设计114.2系统结构与程序的关系124.3接口设计154.3.1用户接口154.3.1.1登录与注册
8、模块用户接口154.3.1.2签到与签退模块用户接口164.3.1.3请假与批复模块用户接口174.3.1.4日志生成与查询模块用户接口184.3.1.5附件模块用户接口194.4数据结构设计204.5功能模块设计224.5.1注册与登录模块224.5.2签到与签退模块234.5.3请假与批复模块244.5.4日志生成与查询模块254.5.5附件模块264.6总体设计274.6.1登录与注册功能284.6.2签到与签退功能284.6.3请假与批准功能284.6.4日志生成与查询功能284.6.5附件模块功能 284.7系统故障处理设计284.7.1出错信息284.7.2解决办法285.系统实现
9、与测试295.1用户与登录注册模块295.1.1功能说明295.1.2程序运行过程截图295.2签到与签退模块305.2.1功能说明305.2.2程序运行过程截图305.3请假与回复模块315.3.1功能说明315.3.2程序运行过程截图315.4日志生成与查询模块325.4.1功能说明325.4.2程序运行过程截图325.5附件模块335.5.1功能说明335.5.2程序运行过程截图336.总结和展望347.结论35参考文献36致谢371.绪论现当今学校的学习生活中,学生老师的数量与日俱增,同时我同学和老师每天都要面对好几次的上课下课,一方面每节课的学生数量庞大,一个一个点名明显作为一种十分
10、笨重的考勤方式,一方面影响同学们的时间,另一方面影响老师的上课效率,所以因此,一款基于python的Django框架的学生签到系统就这样非常有必要。为解决学校之中,学生多,点名难,老师考勤不方便等等问题。此系统不单单包括签到和签退的功能还包括请假的功能,学生填写请假的内容和时间提交,老师可以在线进行回复或者驳回,极大增加了办公效率,还包括学生和老师都可以发布消息,其他成员可以进行回复,此功能加大了本系统的延展性和实用性。本人利用Django框架实现本系统相比于Flask更加的丰富和极具拓展性,方便后期的维护和升级。2.开发工具和技术简介2.1设计目标此系统能帮助老师更快捷,直观的了解到学生们当
11、天的上课情况,包括到教室的时间,下课离开的时间,当天这节课来的同学总人数,迟到的同学人数,请假的同学人数,以及他们迟到和请假的原因。2.2研究方法本考勤系统采取的主要的方法和技术是:Django的框架模式-MTV ,运行平台:Window10操作系统 以及MySQL数据库(Navicate软件用来操作数据库和查看数据库信息),此“Python考勤系统”采用的设计思维是模块化的,具体分为三块:M: Models层 模型层,具体的作用是负责数据库的建模,以及CRUD的操作;将数据库中的表结构抽象成类;T: Templates层 模板层,具体作用是用于处理用户显示的内容,如HTMLV: Views层
12、 视图层,具体作用是处理与用户交互的部分,从模型中获取数据,再将数据发送给模板,最终显示给用户;2.3项目中涉及的技术2.3.1Django框架Django 是一款开放式的WEB应用框架,是用Python写成的。Django采用的是MTV的框架模式,Django最开始被设计出来的目的是用来管理一些新闻咨询为主要内容的网站,其属于劳伦斯出版集团旗下。也叫做CMS(内容管理程序)应用。同时Django在2005年7月在BSD许可证下发布。Django框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。Django的目的是快速开发网站,因此Django拥有极其强大的第三方插件和
13、工具包,我只需要仅仅几行代码就能开发出一个网站,比起以前的Python大大提高了效率,同时减少了网站研发的成本,加快速度。2.3.2 Bootstrap前端框架 Bootstrap前端框架 是现在前端开发中最主流的框架之一,Bootstrap为所有开发者提供了丰富的美观的工具包,方便快捷上手使用2.3.3MTV框架模式Models:一个抽象层,用来构建和操作你的web应用中的数据,模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。from django.db import models# Create your models he
14、re.class BlogsPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField()创建好模型就好了,剩下的由Django完成。Django会根据模型在数据库中创建一个表模板(templates):模板层提供了设计友好的语法来展示信息给用户。使用模板方法可以动态地生成HTML。模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。% if latest_question_list
15、 % % for question in latest_question_list % question.question_text % endfor % % else % No polls are available.% endif %视图(views):用于封装负责处理用户请求及返回响应的逻辑。视图可以看作是前端与数据库的中间人,他会将前端想要的数据从数据库中读出来给前端。他也会将用户要想保存的数据写到数据库。#coding=utf-8from django.shortcuts import renderfrom blog.models import BlogsPostfrom djang
16、o.shortcuts import render_to_response# Create your views here.def index(request): blog_list = BlogsPost.objects.all() return render_to_response(index.html,blog_list:blog_list)查询到BlogsPost数据库里的所有数据,赋值给blog_list变量。return render_to_response(index.html,blog_list:blog_list)通过render_to_response() 返回给浏览器一个
17、index.html页面,并且将blog_list变量的值也返回给index.html。2.3.4 MTV与MVCMVC:Model 代表数据存取层,View 代表的是系统中选择显示什么和怎么显示的部分,Controller 指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图的那部分。以下是 Django 中 M、V 和 C 各自的含义:M定义数据库的东西,一般放在models.pyV定义HTML静态网页相关内容,也就是前端页面C定义业务逻辑,你的主要代码。 C 是由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views), Dja
18、ngo 也被称为 MTV 框架 。在 MTV 开发模式中:M 代表模型(Model),就是数据模型,负责数据的存取;T 代表模板(Template),负责页面的展示逻辑 V 代表视图(View),视图函数,负责业务逻辑的处理;核心目的就是为了解耦,提高开发效率2.4设备要求2.4.1软件需求操作系统 CentOS7.1服务器Nginx 1.12开发平台Pycharm5,python3,Django1.2浏览器 谷歌浏览器数据库 Mysql82.4.2硬件需求1) 最低配置cpu:2GHz双核以上ram:2G以上hd:100G以上gpu:gt6402) 推荐配置需要64位处理器和操作系统cpu:
19、3 GHz四核以上处理器ram:16G以上内存ssd:256G以上gpu:gtx1060 3.系统需求分析3.1系统的构成部分3.1.1系统性需求通过对系统一般需求分类:登录与注册签到与签退请假与批准日志的产生和查询附加模块3.1.1.1登录与注册:功能:包括学生老师账号密码等信息,账号密码核对无误后允许登陆登录与注册模块允许学生通过已注册账号登录考勤签到系统当学生无已注册账号时(一般为新加入的学生),允许学生即时注册账号同时该模块允许管理员老师对现有账号进行操作(一般为删除学生账号)对象:学生和老师3.1.1.2签到与签退:功能:包括上课时间区间,各学生签到与签退情况的详细信息在上课时间开始
20、前,允许登陆学生签到在上课时间结束后,允许登录学生签退允许管理员和老师核对签到与签退情况对象:学生3.1.1.3请假与批准:功能:包括请假人,所在班级,请假日期,请假理由,期限,与老师回复允许学生向老师实施请假操作假条内容包括请假人,所在班级,请假日期,请假理由,期限老师需对请假学生实行回复,具体内容为同意或拒绝管理员可查询请假记录与回复情况对象:学生,老师3.1.1.4日志生成与查询:功能: 包括每日学生签到签退的实际情况每日学习结束后,自动统计当日学生的签到签退情况,并生成日志管理员可以以日期,学生,班级为关键词查看具体日期的学生或班级的签到签退情况老师可查询自己班上的某日某学生签到签退情
21、况的权限(具体操作由管理员执行)对象:老师3.1.1.5附加模块:功能:学生可以发布并回复消息老师可发布并回复消息管理员老师可发布并回复消息管理员可以将某学生或老师禁言或解除禁言对象:学生,老师3.1.2功能性需求1.注册与登录模块表3.1 注册与登陆模块名称:注册与登录模块标识:A1说明:该模块提供给用户注册登陆功能。其中操作有以下几种: 用户注册:需要填写 用户名,真实姓名,班级以及联系电话和家庭住址用户校验:后端会对用户填写的数据通过ajax进行相应的校验,当用户填写的内容符合规定时就将用户信息导入数据库,并且完成注册 系统后端会自动记录用户数据:比如后端对用户的:用户编号,用户等级,用
22、户的注册时间进行自动填写操作。2.签到与签退模块表表3.2 签到与签退模块模块名称:签到与签退模块模块标识:A2说明:该模块提供给用户签到与签退功能。其中涉及到的操作有以下几种:用户签到:用户在课程开始前进行签到用户签退:用户在课程结束后进行签退管理员核对: 管理员对于用户的签到和签退时间进行核对3请假与批准模块表 3.3请假与批准模块模块名称:请假与批准模块模块标识:A3说明:该模块主要功能为允许学生向班级老师提交请假申请其中可能涉及到的操作有以下几种:用户请假:用户提交请假的原因和请假的时间日期管理员审核: 管理员对申请进行统一回复同意或驳回4.日志生成与查询模块表表3.4 日志生成与查询
23、模块模块名称:日志生成与查询模块模块标识:A4说明:该模块会自动生成按照日期的日志其中涉及到的操作有以下几种:管理员可以查询日志信息5.附加模块表3.5 附加模块模块名称:附加模块模块标识:A5说明:该模块是在用户点进入主页后,展示给用户对应的发布信息。其中涉及到的操作有以下几种:用户:发布信息其他用户:可以回复信息管理员:对象发布的信息进行操作和审核3.1.3非功能性需求本系统的ui界面简洁直观,区域划分合理,对于运行的Windows环境要求不好,只要是正版系统都可以运行,大多数网站都适用的模板,是特别经典的Python WEB的结构和模板。3.2开发环境的选择在系统需求分析阶段采用Micr
24、osoft Windows 10。当进入系统代码开发阶段则采用pycharm专业版 + Mysql数据库 + Windows 10的运行环境。辅助工具采用Navicate4.系统设计4.1总体设计我采用了MTV+三层架构作为我这个系统的实现思路。Models:一个抽象层,用来构建和操作你的web应用中的数据,模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。创建好模型就好了,剩下的由Django完成。Django会根据模型在数据库中创建一个表模板(templates):模板层提供了设计友好的语法来展示信息给用户。使用模板方法可以动
25、态地生成HTML。模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。视图(views):视图函数,负责业务逻辑的处理,他也会将用户要想保存的数据写到数据库。查询到BlogsPost数据库里的所有数据,赋值给blog_list变量。通过render_to_response() 返回给浏览器一个index.html页面,并且将blog_list变量的值也返回给index.html。4.2系统结构与程序的关系4.3接口设计4.3.1用户接口4.3.1.1登录与注册模块用户接口4.3.1.1.1注册状态数据名称注册状态数据标识A001子系统名称登录与注册模块系统名称Py
26、thon学生考勤系统接口说明输入账号自定义密码输出账号详细密码详细注册成功功能说明实现学生账号的添加4.3.1.1.2登录状态数据名称登录状态数据标识A002子系统名称登录与注册模块系统名称Python学生考勤系统接口说明输入1账号2密码输出账号详细密码详细登陆成功功能说明实现已注册人员进入系统4.3.1.2签到与签退模块用户接口4.3.1.2.1学生自主签到签退名称签到签退状态数据标识A003子系统名称签到与签退模块系统名称Python学生考勤系统接口说明输入账号签到类型输出账号详细签到类型签到(签退)成功功能说明实现学生自主签到签退4.3.1.2.2管理员核对名称签到签退状态数据标识A00
27、4子系统名称签到与签退模块系统名称Python学生考勤系统接口说明输入账号查看签到(签退)详细输出账号详细具体签到(签退)情况功能说明实现管理员核对4.3.1.3请假与批复模块用户接口4.3.1.3.1学生提交请假申请名称请假状态数据标识A005子系统名称请假与批复模块系统名称Python学生考勤系统接口说明输入账号班级原因开始时间截止时间输出账号详细班级详细原因开始时间截止时间功能说明实现学生自主提交请假申请4.3.1.3.2班级老师批复名称批复状态数据标识A006子系统名称请假与批复模块系统名称python学生考勤系统接口说明输入账号批复内容输出账号详细批复内容功能说明实现班级老师对学生请
28、假申请实施批复4.3.1.4日志生成与查询模块用户接口名称查询状态数据标识A007子系统名称日志生成与查询模块系统名称python学生考勤系统接口说明输入账号欲查询日志关键字输出账号详细欲查询日志关键字日志详细功能说明实现管理员查询日志4.3.1.5附加模块用户接口4.3.1.5.1发布消息名称发布状态数据标识A008子系统名称附加模块系统名称python学生考勤系统接口说明输入账号主题发布内容发布时间输出账号详细主题发布内容发布时间功能说明实现用户发布消息4.4.1.5.2回复消息名称回复状态数据标识A009子系统名称附加模块系统名称python学生考勤系统接口说明输入账号主题回复内容回复时
29、间输出账号详细主题回复内容回复时间功能说明实现用户回复消息4.3.1.5.3管理员操作名称管理员操作状态数据标识A010子系统名称附加模块系统名称python学生考勤系统接口说明输入账号操作选项输出账号详细操作选项操作成功功能说明实现管理员权限操作4.4数据结构设计数据结构NameCode系统设置表SystemSetting时间设置表TimeSetting用户类型表UserType班级表Dept学生表Staff考勤类型表CheckType考勤信息表CheckInfo主题表Theme假条表Leave回复表Reply日志表Daily公告表Notice图片表1Reply_Img图片表2Theme_I
30、mg图片表3Notice_ImgPython学生考勤系统PDM图4.5功能模块设计4.5.1注册与登录模块功能:未注册学生可以注册新账号,已注册用户可以直接使用现有账号登录系统。输入项目:用户鼠标单击输入存储分配:内部数据:系统设置# 用户类型表 UserTypeclass UserType(models.Model):display = models.CharField(max_length=50, null=False, verbose_name=用户类型) class Meta: verbose_name = 用户类型 verbose_name_plural = 用户类型 def _un
31、icode_(self): return self.display def _str_(self): return self.display# 学生表 Staffclass Staff(models.Model): username = models.CharField(max_length=25, null=False, primary_key=True, verbose_name=用户名) password = models.CharField(max_length=50, null=False, verbose_name=密码) sex_choices = (0, 男), (1, 女),
32、 staff_no = models.CharField(max_length=20, null=True, verbose_name=学生号) sex = models.CharField(max_length=4, choices=sex_choices, null=False, verbose_name=性别) staff_dept =models.ForeignKey(Dept, verbose_name=所属班级) true_name = models.CharField(max_length=25, null=False, verbose_name=真实姓名) tel = mode
33、ls.CharField(max_length=25, null=False, verbose_name=联系电话) address = models.CharField(max_length=25, null=True, verbose_name=家庭住址) user_type = models.ForeignKey(UserType, verbose_name=用户类型) class Meta: verbose_name = 学生 verbose_name_plural = 学生 def _unicode_(self): return self.username def _str_(sel
34、f): return self.username4.5.2签到与签退模块功能:允许学生执行签到签退操作输入项目:单击“签到”或“签退”选项输出项目:“签到成功”或“签退成功”内部数据:# 考勤类型表 CheckTypeclass CheckType(models.Model): type_name = models.CharField(max_length=10, primary_key=True, verbose_name=类型) class Meta: verbose_name = 考勤类型 verbose_name_plural = 考勤类型 def _unicode_(self): r
35、eturn self.type_name def _str_(self): return self.type_name# 考勤信息表 CheckInfoclass CheckInfo(models.Model): staff_id = models.ForeignKey(Staff, verbose_name=学生ID) dept_id = models.ForeignKey(Dept, verbose_name=班级ID) check_time = models.DateTimeField(auto_now_add=True, verbose_name=考勤时间) check_type =
36、models.ForeignKey(CheckType, verbose_name=考勤类型) remarks = models.CharField(max_length=25, null=True, verbose_name=备注信息) class Meta: verbose_name = 考勤信息 verbose_name_plural = 考勤信息 def _unicode_(self): return self.staff_id def _str_(self): return self.staff_id测试要点:数据库连接情况:正常情况,数据库文件缺少,外部系统异常系统设置获取:正常情
37、况,外部系统异常对用户的输入响应:系统正确判断用户所选的签到方式并记录4.5.3请假与批复模块功能:允许班级学生向所属班级老师提交请假申请,并由所属班级老师进行批复输入项目:假条各项详细,提交请假申请输出项目:提交成功,清等待批复内部数据:# 假条表 Leaveclass Leave(models.Model): staff_id = models.ForeignKey(Staff, verbose_name=学生ID) staff_dept = models.ForeignKey(Dept, verbose_name=学生班级) reason = models.CharField(max_l
38、ength=50, null=False, verbose_name=原因) start_date = models.DateTimeField(null=False, verbose_name=开始时间) end_date = models.DateTimeField(null=False, verbose_name=结束时间) class Meta: verbose_name = 假条 verbose_name_plural = 假条 def _unicode_(self): return self.content def _str_(self): return self.content测
39、试要点:数据库连接情况:正常情况,数据库文件缺少,外部系统异常系统设置获取:正常情况,外部系统异常对用户的输入响应:系统正确记录用户输入信息并提交4.5.4日志生成与查询模块功能:系统按日期生成签到签退记录表,供管理员查询输入项目:无输出项目:签到签退记录表内部数据:# 日志表 Dailyclass Daily(models.Model): staff_count = models.IntegerField(null=False, verbose_name=学生数) check_staff = models.IntegerField(null=False, verbose_name=考勤学生数
40、) uncheck_staff = models.IntegerField(null=False, verbose_name=未考勤学生数) late_staff = models.IntegerField(null=False, verbose_name=迟到学生数) leave_staff = models.IntegerField(null=False, verbose_name=早退学生数) daily_text = models.TextField(verbose_name=日志文本) create_time = models.DateTimeField(auto_now_add=T
41、heme, verbose_name=日志创建时间) class Meta: verbose_name = 日志 verbose_name_plural = 日志 def _unicode_(self): return self.content def _str_(self): return self.content测试要点:数据库连接情况:正常情况,数据库文件缺少,外部系统异常系统设置获取:正常情况,外部系统异常4.5.5附加模块功能:允许用户(包括学生,班级老师和管理员)发布与回复消息输入项目:消息详细输出项目:提示发布(回复)成功内部数据:# 公告表 Noticeclass Notice(models.Model): pub_user = models.ForeignKey(Staff, verbose_name=发布人) notice_text = models.TextField(verbose_name=公告内容) create_time = models.DateTimeField(auto_now_add=Theme, verbose_name=公告时间) class Meta: verbose_name = 公告 verbose_name_plural = 公告
限制150内