基于.net MVC的学生网上请假系统设计与实现

摘 要

基于.netMVC的学生网上请假系统
摘要:随着信息化的发展,互联网基于多元化的服务,网络在线系统逐渐占据我们日常生活中的一部分,网络系统的需求将会越来越大,互联网给我们提供了个良好的竞争平台,虚拟交易也变得真实。
这个系统主要实现了学生管理、教室管理等的信息化和网络化,提高了办公管理效率。同时将学生请假、老师对学生请假的审批等这两个网页前台模块和请假信息管理、学校校园信息管理模块结合起来。经过参考网上对信息模块管理模式,全面的功能测试,系统也实现了很多丰富又实用的学生各类信息设置、方便了老师及学生的生活效率等。
这个系统相对现阶段外面类似的网上管理信息系统,代码修改性和拓展性好,操作步骤简洁,系统的加密及安全度相对来说也高,运行相对稳定。
关键词:网站,学生请假系统,ASP.NET ,SQL server 2008

The Design and Implementation of Student
Online Leave System
Abstract: With the development of informatization, the Internet is based on diversified services, and online online systems gradually occupy a part of our daily lives. The demand for network systems will become greater and greater. The Internet provides us with a good competitive platform. Virtual trading has also become real.
This system mainly realizes the information and network of student management, classroom management, etc., and improves the efficiency of office management. At the same time, the two webpage front-end modules of student leave and teacher approval of student leave are combined with leave information management and school campus information management module. After referring to the online information module management model and comprehensive functional testing, the system has also realized a lot of rich and practical student information settings, which facilitates the life efficiency of teachers and students.
Compared with the similar online management information system at this stage, this system has good code modification and expansibility, simple operation steps, relatively high encryption and security of the system, and relatively stable operation.
Keywords: website, student leave system, ASP.NET, SQL server 2008

目 录

第1章 绪论 1
1.1 系统的开发背景 1
1.2 问题描述 1
1.3 技术分析 1
第2章 相关技术介绍 2
2.1 HTML网页技术 2
2.2 JSP脚本语言 2
2.3 C#语言 2
第3章 需求分析 3
3.1 可行性分析 3
3.2 功能需求分析 3
3.2.1 学生用例 3
3.2.2 学生用例规约 4
3.2.3 学生相关顺序图 6
3.2.4 3.2.4 老师用例 9
3.2.5 老师用例规约 9
3.2.6 老师相关顺序图 12
3.3 非功能需求分析 14
3.4 安全性需求分析 14
第4章 系统设计 16
4.1 系统架构设计 16
4.2 系统总体设计 16
4.3 数据库设计 17
第5章 系统实现 21
5.1 首页面 21
5.2 登录功能 21
5.3 注册界面功能 23
5.4 学生个人设置 25
5.5 学生请假 26
5.6 学生销假 29
5.7 学生历史请假 30
5.8 老师待审请假 30
5.9 老师查询历史请假 31
5.10 老师查询历史销假 31
5.11 老师个人设置 32
第6章 系统测试 33
6.1 测试目的 33
6.2 功能测试 33
6.3 性能测试 34
总结与展望 35
参考文献 36
致 谢 37

第1章 绪论

1.1 系统的开发背景
随着社会的发展,曾经不同规模的竞争现在已经成为了社会不同领域之前技术的竞争,人才与管理间的竞争,而计算机技术的进步与发展,也离不开软件的日益更新和进步。在现阶段,在电脑软件的更新和替换的过程中,已经涉及到各种领域都不断向网络化发展,如政府机关,公司基层,各大高校等。而作为学生的我,哪怕不经常旷课和请假,但是难免会遇到紧急的事情的马上请假去办,可是在学校请假的步骤却很繁琐。学生要先和老师要请假条并且写好,然后给老师批准,并且还得考虑到老师是否在办公室,所以有时候就会出现很多不必要的麻烦。因此为了学生和老师,也是为了自己的方便,我也根据了自己考虑实际情况和需求开发了这个学生网上请假系统。
1.2 问题描述
在考虑到做这个软件之前,我也考虑到自己所学的知识是有限的,而且在这之前自己也从来没有接触过这种类似的软件和程序,因此很多功能的具体实现也心里没底,所以我也只能用些简单的功能来代替掉目前社会商用水平的功能,比如在做系统的设置界面时,怎么做才可以让大家更适应,快捷的了解并使用到这个软件,如何优化页面的UI,如何提高这个系统未来的拓展性和开发潜力等,这些都是很多所面临的问题。
1.3 技术分析
现阶段社会比较主流的软件模式框架模式是Model ViewController,简称MVC。MVC每个字母都代表一个意思,分别是模型、视图和控制器三个基本部分。简单点来说,就是降低程序代码之间的耦合度。MVC的设计模式简单来说就是分成五个模块。分别是View层是程序处理显示数据的部分;DO层是对数据对象的封装;DB层是程序连接数据库的层,也是算中间层;DAO层程序对数据库操作层;Control层是程序处理用户交互的层。

第2章 相关技术介绍

2.1 HTML网页技术
HTML是现阶段制作网页的常用语言,它平常都是用于制作静态页面。它的命令是可以体现文字信息、链接信息、图形信息和表格信息等等。现在它被大众普遍接受广泛应用在网络上。
2.2 JSP脚本语言
JSP可以放在在html里使用,也可以独自使用,它同时也具备有很多种优点,可以讲,Web脚本技术的先驱是JSP。现代编程语言(像C,Java和Perl等)的一些最好的特点都融合在JSP里,Web服务器里的一部分配置标准是由JSP、Tomcat和数据库等的拼装在一起的。
2.3 C#语言
C#语言是微软开创的一种最新的、面向对象的编程语言。程序员可以利用这个语言快速地编写各种基于Microsoft .NET平台的应用程序,该平台还提供许多服务和工具,使得计算与通讯领域得到最大程度地开发。虽然在这普遍使用java的年代,毕竟C#是微软的,但是我还是相信C#在社会还是有自己不可动摇的地位的。

第3章 需求分析

3.1 可行性分析
在技术性方面,MVC框架分层可以很好做到前后端分离,这样对于程序员对项目的开发是很有帮助的。由于MVC的分层,降低了系统各层之间的耦合度,使得程序员在开发的同时可以专注负责自己的开发模块,也不会相互影响。这样对项目的后期修改也是很大帮助的,一旦一个地方出了问题或者需要修改,也不需要整体修改。
实用性方面,本次设计的主要任务是在学生网上请假系统内学生请假、老师批假、学生信息添加及绑定等,符合当前潮流的发展。从用户角度出发,可以同时考虑用户的便利和学校的工作效率出发,提高网上请假的实用性。
3.2 功能需求分析
学生网上请假系统是用户通过正确的填写学号或者工号和密码进入系统,这个系统分为两大客户端,一个是学生端和另一个是教师端,学生端分为请假申请、销假申请、个人请假记录查询,教师端分为请假审批、销假审批、学生销假记录查询和学生请假记录查询。
学生网上请假系统使用者分别为学生和教师,老师审批学生的请假,前提都是学生要在系统发出申请信息,而只有等到老师批准之后学生才可以提出申请销假。
3.2.1 学生用例
以下图3.1是学生端用例图,学生的功能模块有登录、申请请假、申请销假、查询请假记录这个的操作。
在这里插入图片描述

图3.1 学生用例图
3.2.2 学生用例规约
1.登录
参与者学生需要用户名和密码登录到系统,才可以进行对应不同的操作,学生的登录用户名为学号,初始化密码为学号,如表3.1 所示。
表3.1 学生登录模块用例规约表
用例编号 UC-001 用例名称 登录
功能描述 验证用户名和密码,确认是学生登录。
执行者 学生
前置条件 用户名和密码经过验证准确并通过
后置条件 学生登录成功,并可进行对系统相关事务处理。
基本路径 1、学生输入用户名和密码,并且登录系统
1.1学生输入用户名和密码并按下登录键,系统向数据库发送验证请求
1.2数据库接收请求,对用户名和密码进行验证
1.3数据库将验证结果回传到请假系统
扩展 1.1、输入的密码只能是数字和英语单词
1.2、对用户名、密码进行验证
1.2.1、输入的信息与数据库的数据匹配成功,则正常登录
1.2.2、输入的信息与数据库的数据匹配失败,提示重新输入
字段列表 用户名 密码
业务规则
备注
2.申请请假
参与者学生需要先登录系统进入到学生在请假系统中,填写请假申请单,请假申请单会提交给老师管理系统进行审批,如下表3.2所示。
表3.2 学生申请请假用例规约表
用例编号 UC-002 用例名称 申请请假
功能描述 学生创建新的请假申请单,然后填写请假信息,并把申请信息提交给老师
执行者 学生
前置条件 1、学生正常登录到系统后,先完善好个人信息
2、打开请假管理页面
后置条件 1.系统将保存该条请假记录
2.创建新的请假单并生成独有的的申请编号
3.创建新的请假申请流程实例
4.记录提交后不能够再修改
基本路径 1、学生选择创建请假申请单
学生点击“请假”按钮,系统会通过查询学生ID,查询出当前的学生是否还有没有销假的记录,如果存在没有销假的请假记录,显示你需要销假后再申请;如果没有未销假记录,则显示出请假申请单。
2、学生录入本人外出去向、请假原因、时间范围(开始时间,结束时间)、图片附件,不能为空,向数据库发送录入请求。数据库接受到请求后,将学生的请假信息录入到数据库中,系统回传到界面,显示所有请假的界面
扩展
字段列表 外出去向、请假原因、开始时间、结束时间
业务规则
备注
3.申请销假
参与者学生需要先登录系统进入到学生在请假系统中,学生在系统点击销假申请时,如果申请成功,此时请假信息中的状态会修改为申请销假,否则提示申请销假失败,如下表3.3所示。
表3.3 学生申请销假用例规约表
用例编号 UC-003 用例名称 申请销假
功能描述 学生成功进入请假界面,点击销假,然后再次确认申请销假
执行者 学生
前置条件 学生打开学生网上请假系统,成功登录后进入请假系统
后置条件 登录成功后,系统把相应的权限页面
基本路径 1、学生向系统发出销假申请,而且等待系统验证
1.1如果显示申请成功,系统将返回请假界面等待辅导员审核
1.2如果显示申请失败,系统就显示提示申请销假失败,请重新申请
扩展
字段列表
业务规则
备注
4.查询请假记录
参与者学生需要先登录系统进入到学生在请假系统中,学生通过系统点击个人“请假历史”,系统对该学生请假记录查询,如果查询成功,学生请假的记录将会显示在页面上,如表3.4所示。
表3.4学生查询请假记录用例规约表
用例编号 UC-004 用例名称 查询请假记录
功能描述 学生进入请假界面后,点击历史请假,系统显示历史请假记录
执行者 学生
前置条件 学生打开学生网上请假系统,成功登录后进入请假系统
后置条件 登录成功后,系统把相应的权限页面
基本路径 1、学生点击“历史请假”按钮,系统查询请假记录
1.1如果验证成功,则显示历史请假记录
1.2如果验证失败,则提示查询失败或你没有历史请假记录,请重新申请
扩展
字段列表
业务规则
备注
3.2.3 学生相关顺序图
1.学生请假申请顺序图
该顺序图反映了学生对请假申请的一系列操作如下:
(1)学生登录请假系统后,发送请假申请到请假申请控制类中。
(2)检验该学生是否有可以申请请假的权限,如果有,继续到下一步;否则,系统再次检验。
(3)系统获取该学生是否有未销假记录到请假记录信息内系统自动查询.
(4)如果该学生有未销假的信息,则显示出未销假记录的信息(不可以请假)。
(5)显示请假申请单,并提示填写申请单(可请假)。
(6)学生在界面上填写请假信息。
(7)提交请假信息单。
(8)创建请假记录对象。
(9)系统验证请假信息填写的准确性。
(10)验证完成正确后,保存请假记录。
(11)保存成功后,系统返回请假详情。
(12)显示保存成功的提示到页面中。
(13)显示保存失败的提示到页面中。
如图3.2所示。
在这里插入图片描述

图3.2 学生请假申请顺序图

2.学生销假申请顺序图
(1)学生点击销假按钮,系统发送销假申请到销假申请控制类中。
(2)该学生的销假申请,系统对此进行异常的判断。
(3)在页面中显示申请销假成功(正常)。
(4)在页面中显示申请失败,同时提示重新申请(异常)。
如图3.3所示。
在这里插入图片描述

图3.3 学生销假申请顺序图
3.学生请假查询顺序图
(1)学生发送查询信息。
(2)创建请假记录的对象。
(3)数据库将请假历史信息回送到请假管理界面。
(4)显示该学生的请假详情在界面中。
如图3.4所示。
在这里插入图片描述

图3.4 学生请假查询顺序图
3.2.4 老师用例
以下图3.5是老师端用例图,学生的功能模块有登录、待审请假、查询请假记录、待审销假、查询销假记录这个的操作,如下图3.5所示。
在这里插入图片描述

图3.5 老师用例图
3.2.4 老师用例规约
1.登录
参与者老师需要用户名和密码登录到系统,才能进行相应的操作,系统中设置老师的登录用户名为工号,初始化密码为工号,如表3.5所示。
表3.5 老师登录用例规约表
用例编号 UC-005 用例名称 登录
功能描述 验证工号和密码,确保是管理员登录。
执行者 老师
前置条件 工号和密码经过验证准确并通过
后置条件 老师登录成功,并可进行对系统相关事务处理。
基本路径 1、老师输入用户名和密码,然后登录系统
1.1老师输入账户号码和密码并按下登录键,系统向数据库发送验证请求
1.2数据库接收请求,对用户名和密码进行验证
1.3数据库将验证结果回传到请假系统
扩展 1.1、输入的密码只能是数字和英语单词
1.2、对账户、密码进行验证
1.2.1、输入的信息与数据库的数据匹配成功,则正常登录
1.2.2、输入的信息与数据库的数据匹配失败,提示重新输入
字段列表 用户名 密码
业务规则
备注
2.待审请假
参与者老师需要先登录系统进入到老师管理系统中,老师通过系统查看学生请假申请单,自行审批学生是否给予请假,并填写审核意见提交,如表3.6所示。
表3.6 老师待审请假用例规约表
用例编号 UC-006 用例名称 待审请假
功能描述 老师登录系统后,审批自己学生的请假申请,并提交审核意见。
执行者 老师
前置条件 老师正常登录到系统,同时打开待审请假页面中
后置条件 该老师负责的学生,有学生的请假申请需要审批,并进行对系统相关事务尽心处理
基本路径 1、老师登录系统后,点击“待审请假”按钮
2、系统显示该老师待审请假的信息
3、老师对学生的请假申请进行审批,并填写审批意见,并向数据库发送给信息增加请求
4、数据库接受请求后,将审批通过的信息及审批意见写入数据库,然后回传到请假历史界面中

扩展 审批完成后,跳转回待审请假界面
字段列表 审批意见
业务规则
备注
3.查询请假记录
参与者老师需要先登录系统进入到老师管理系统中,老师通过系统可以查看到学生请假历史记录,并可校对自己操作是否有误等,如表3.7所示。
表3.7 查询请假记录用例规约表
用例编号 UC-007 用例名称 查询请假记录
功能描述 老师登录系统后,查看学生请假记录,可查看申请人、申请时间、请假事由、当前请假状态等信息。
执行者 老师
前置条件 老师正常登录到系统之后,打开请假历史页面中
后置条件 已有审批完的请假信息
基本路径 1、老师点击请假历史按钮发出查询请假记录,并等待系统验证
1.1如果验证成功,则显示审核过的学生的请假历史记录
1.2如果验证失败,则提示查询失败或无历史请假记录,请重新申请
扩展
字段列表
业务规则
备注
4.待审销假
参与者老师需要先登录系统进入到老师管理系统中,老师通过系统查看学生销假申请,自行审批学生是否给予销假,并再次确认,通过则销假成功,如表3.8所示。
表3.8 老师待审销假用例规约表
用例编号 UC-008 用例名称 申请销假
功能描述 老师登录系统后,查看待审核的学生销假信息,老师对申请销假的学生进行审批。
执行者 老师
前置条件 老师正常登录到系统之后,打开请假历史页面中
后置条件 该老师负责的学生,有学生的销假申请需要审批,并进行对系统相关事务尽心处理
基本路径 1、老师登录系统后,点击待审请假按钮
2、系统显示该老师待审销假的信息
3、老师对学生的销假申请进行审批,并再次确认后点击通过按钮,并向数据库发送给信息增加请求
5、数据库接受请求后,将审批通过的信息及审批意见写入数据库,然后回传到销假历史记录界面中
扩展
字段列表
业务规则
备注
5.查询销假记录
参与者老师需要先登录系统进入到老师管理系统中,老师通过系统可以查看到学生销假历史记录,并可校对自己操作是否有误等,如表3.9所示。
表3.9 老师查询销假记录用例规约表
用例编号 UC-009 用例名称 查询销假记录
功能描述 老师登录系统后,查看学生销假记录,可查看申请人、申请时间、请假事由、当前请假状态等信息。
执行者 老师
前置条件 老师正常登录到系统,并打开销假历史页面中
后置条件 已有审批完的销假信息
基本路径 1、老师点击销假历史按钮发出查询请假记录,并等待系统验证
1.1如果验证成功,则显示审核过的学生的销假历史记录
1.2如果验证失败,则提示查询失败或无历史销假记录,请重新申请
扩展
字段列表
业务规则
备注
3.2.5 老师相关顺序图
1.待审请假顺序图
(1)老师在待审核请假记录界面,确认审核信息
(2)提示输入审核意见
(3)老师填写完审核意见,确认提交审核意见
(4)老师审核信息一并审核判断结果录入到数据库中
(5)界面显示审核成功
如图3.6所示:
在这里插入图片描述

图3.6待审请假顺序图
2.请假历史顺序图
(1)老师发送查询信息
(2)创建学生请假记录的对象
(3)数据库将请假历史信息回送到请假管理界面
(4)显示学生历史请假详情在界面中
如图3.7所示。
在这里插入图片描述

图3.7请假历史顺序图
3.待审销假顺序图
(1)老师在待审核销假记录界面,确认审核信息
(2)提示再次需要再次审核确认
(3)再次审核确认完成
(4)审核信息一并录入到数据库中
(5)界面显示审核成功
如图3.8所示。
在这里插入图片描述

图3.8待审销假顺序图
4.销假历史顺序图
(1)老师发送查询信息
(2)创建学生销假记录的对象
(3)数据库将销假历史信息回传到请假管理界面
(4)显示学生历史销假详情在界面中
如图3.9所示:
在这里插入图片描述

图3.9销假历史顺序图
3.3 非功能需求分析
首先主要考虑的是系统功能软件,在具体设计的环节上,是不是能够较好的满足各类用户的基本功能需求,如果不能较好的满足用户需求,那么这个系统的存在是没有价值的。软件系统的非功能性求分析,在7个方面展开,一个是性能分析,针对系统;一个是安全分析,针对系统,一个是完整度分析,针对系统,一个是可维护分析,针对系统,一个是可扩展性分析,针对系统,一个是适应业务的性能分析。面对汽车论坛管理系统存在的性能、安全、扩展、完整度等7个方面性能综合比对分析后发现,需要相应的非功能性需求分析。
3.4 安全性需求分析
安全性对于每个系统来说都是非常重要的一个方面。安全性很好的系统可以保护企业的信息和用户的信息不被窃取。提高系统的安全性不仅是对用户的负责,更是对企业的负责。尤其针对于学生网上请假系统来说,必须要有很好的安全性来保障整个系统。
系统具有对使用者有权限控制,针对角色的不通限制使用者的权限,以此来确保系统的安全性。

第4章 系统设计

4.1 系统架构设计
本次学生网上请假系统的架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层,如图4.1所示。
在这里插入图片描述

图4.1 系统架构
4.2 系统总体设计
这个学生请假管理系统分为两个模块,学生端、教师端。学生和教师在登录成功时,分别进入两个不同的页面进行操作,学生端进行请假申请、销假申请和查询个人请假记录;老师审批请假、老师审批销假、老师查询请假和老师查询销假,如图4.2所示。
在这里插入图片描述

图4.2系统总体设计图
4.3 数据库设计
学生网上请假系统所拥有的数据表有主要以下几个表:请假信息表,用户信息表,审核信息表等。
由于数据表较多,只展示系统主要数据表,如下表所示。
Leave表:字段包括编号、本人外出去向、请假类型、请假原因、时间类型、该天内的时间、该天的开始节数、一天的结束节数、请假开始日期、请假结束日期、图片附件地址,如表4.1所示。
表4.1 请假条信息数据库表
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 id Int 4
2 ToWhere nvarchar(MAX) -1
3 Category int 4
4 Reason nvarchar(MAX) -1
5 TimeType int 4
6 OneDayTime datetime 8
7 OneDayStart int 4
8 OneDayEnd int 4
9 StartDate datetime 8
10 EndDate datetime 8
11 ImageUrls nvarchar(MAX) -1 1
12 LeaveStatus int 4
13 AddTime datetime 8
14 IsResume int 4
15 ResumeTime datetime 8 1
16 Student_StudentId nvarchar(128) 128 256
Check表:包括审核id、审核状态、审核顺序、审核时间、审核意见、老师id、请假id,如表4.2所示。
表4.2 审核信息数据库表
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 id Int 8
2 CheckStatus int 4
3 CheckOrder int 4
4 CheckTime datetime 8
5 AddTime datetime 8 1
6 CheckOpinion nvarchar(100) 200
7 CheckTeacher_TeacherId nvarchar(128) 256
8 Leave_Id int 4
Class表:包括自生成id、类别定义、老师类别、年纪、专业,如表4.3所示。
表4.3 分类数据库表
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 id Int 4
2 ClassDefination nvarchar(MAX) -1
3 ClassTeacher_TeacherId nvarchar(128) 256
4 Grade_Id int 4
5 Major_Id int 4 1
User表:该图是用户信息表包括id、用户名称、头像、手机号码、邮箱、确认邮箱、密码、安全验证、确认手机号,如表4.4所示。
表4.4 用户信息数据库表
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 id nvarchar(128) 256
2 UserName nvarchar(256) 512
3 HeadImage nvarchar(MAX) -1
4 PhoneNumber nvarchar(50) 100
5 Name nvarchar(MAX) 512 1
6 Email nvarchar(256) 1
7 EmailConfirmed bit 1
8 PasswordHash nvarchar(500) 512
9 SecurityStamp nvarchar(500) 512
10 PhoneNumberConfirmed bit 1
Office表:该表包括id、部门名称、描述、描述id,如表4.5所示。
表4.5 部门信息数据库表
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 id int 4
2 Name nvarchar(MAX) -1
3 Description nvarchar(MAX) -1
4 Department_Id int 4
LessonInfo表:该表包括的字段有id、起始周、结束周、课程类别、工作日、教室位置、课程id、老师id、学生id,如表4.6所示。
表4.6 课程信息数据库表
序号 字段名称 字段类型 大小 允许为空 最大长度 备注
1 id int 4
2 StartWeek int 4
3 EndWeek int 4
4 ClassSeq int 4
5 WeekDay int 4
6 Classroom nvarchar(MAX) -1 1
7 LessonId int 4
8 TeacherId nvarchar(128) 256 1
9 StudentId nvarchar(128) 256 1

第5章 系统实现

5.1 首页面
该界面是简单介绍学生网上请假系统的用途和优势,使得用户对该系统有了初步的了解,用户还可对系统进行注册,登录等操作.如图5.1所示
在这里插入图片描述

图5.1系统首页界面
5.2 登录功能
登录功能是每个项目都需要的一个基本功能模块,而且也是查询信息的一种,不过在查询信息的过程中系统对页面得到的输入数据和数据库的数据进行配对,如果匹配成功,系统进入到另外一个页面,如果登录失败,系统进行提示并重新登录,登录过程中在后台数据中定义了标志变量来表示学生和教师。
在系统登录过程中进行了简洁的数据校验,就是用户名和密码不能为空,如果为空,系统将会提示错误信息,并提醒重新登录。登录的界面如图5.2所示
在这里插入图片描述

图5.2 登录界面
登录界面代码。
///
/// 登录
///
///
public ActionResult Login(string returnUrl)
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction(“Index”);
}
ViewBag.ReturnUrl = returnUrl;
return View();
}

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(UserLoginViewModel login, string returnUrl)
    {
        if (login.VerificationCode.ToUpper() != TempData["VerificationCode"].ToString())
        {
            ModelState.AddModelError("VerificationCode", "验证码错误");
        }
        else
        {
            if (ModelState.IsValid)
            {
                var user = _userService.Find(login.UserName);
                if (user == null)
                {
                    ModelState.AddModelError("UserName", "用户名不存在");
                }
                else if (user.Password == Security.Sha256(login.Password))
                {
                    _userService.Update(user);

                    var identity = _userService.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
                    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
                    AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = login.RememberMe }, identity);

                    Session["User"] = user;

                    if (string.IsNullOrEmpty(returnUrl))
                    {
                        return RedirectToAction("Index", "Home");
                    }
                    if (Url.IsLocalUrl(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("Password", "密码错误");
                }
            }
        }
        return View();
    }

5.3 注册界面功能
用户自行规范填写学生号或工号,及设定密码,和通知邮箱,最后填写随机验证码,并接受协议,然后点击“确认注册”按钮进行注册操作;用户注册成功后,系统将返回到登录界面。如图5.3所示。
在这里插入图片描述

图5.3 注册界面
用户注册界面代码:
///
/// 注册
///
///
///
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(UserRegisterViewModel register)
{
if (TempData[“VerificationCode”] == null ||
TempData[“VerificationCode”].ToString() != register.VerificationCode.ToUpper())
{
ModelState.AddModelError(“VerificationCode”, “验证码错误”);
return View(register);
}

        if (ModelState.IsValid)
        {
            if (_userService.Exist(register.UserName))
            {
                ModelState.AddModelError("Username", "用户名已存在");

            }
            else if (register.Password != register.Password2)
            {
                ModelState.AddModelError("Password", "两次密码不一致");
            }
            else
            {
                AppUser user = new AppUser
                {
                    UserName = register.UserName,
                    //默认用户组代码写这里
                    Password = Security.Sha256(register.Password),
                    //邮箱验证与邮箱唯一性问题
                    Email = register.Email,
                    //用户状态问题
                    Status = 0,
                    DisplayName = register.UserName,
                };
                user = _userService.Add(user);
                if (!string.IsNullOrEmpty(user.Id))
                {
                    Session["User"] = user;
                    var identity = _userService.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
                    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
                    AuthenticationManager.SignIn(identity);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", "注册失败");
                }
            }

5.4 学生个人设置
学生登录/注册成功之后可以完善自己的基本信息。配置完权限的后,信息表单中每一个input的name值都要与实体类中的参数相匹配,学生可以根据个人的手机号,宿舍号,家庭住址,家庭电话进行写入,点击保存,数据就会提交到数据库内进行添加或者修改。如图5.4所示
在这里插入图片描述

图5.4 学生个人设置界面
5.5 学生请假
下图5.5是学生请假模块的界面图,界面上包含了学生请假需要填写的基本信息,如本人外出去向、请假原因、请假时间范围、请假开始时间、请假结束时间、附加图片等,当学生填写完所有基本信息之后,点击下一步;如果信息填写完整,弹出确认请假窗口,学生确认请假,否则显示信息填写不完全,返回界面让学生继续修改或填写。
在这里插入图片描述

图5.5学生请假界面
学生申请请假界面代码:
public LeaveController()
{
_leaveService = new LeaveService();
}
// GET: Student/Leave
[Authorize]
public ActionResult Index()
{
int totalRecord;
var list = _leaveService.FindPageList(1, 10, out totalRecord, 0, User.Identity.GetUserId());

        List<LeaveListViewModel> list2 = new List<LeaveListViewModel>();
        foreach (var leaf in list.ToList())
        {
            list2.Add(new LeaveListViewModel
            {
                Leave = leaf,
                Status = _leaveService.GetLeaveStatus(leaf.LeaveId, leaf.UserId)
            });
        }
        return View(list2);
    }

    [Authorize]
    public ActionResult Notice()
    {
        return View();
    }

    /// <summary>
    /// 申请请假
    /// </summary>
    /// <returns></returns>
    [Authorize]
    public ActionResult Apply()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    [Authorize]
    public ActionResult Apply(LeaveApplyViewModel leavemoModel)
    {
        if (ModelState.IsValid)
        {
            //判断是否需要图片附件
            switch (leavemoModel.Category)
            {
                //病假
                case LeaveCategory.病假:
                    break;
                //事假
                case LeaveCategory.事假:
                    break;
            }

            var userId = User.Identity.GetUserId();

            Leave leave = new Leave
            {
                Category = leavemoModel.Category,
                StartDate = leavemoModel.StartDate,
                EndDate = leavemoModel.EndDate,
                ImageUrls = leavemoModel.ImageUrls,
                OneDayTime = leavemoModel.OneDayTime,
                OneDayStart = leavemoModel.OneDayStart,
                OneDayEnd = leavemoModel.OneDayEnd,
                Reason = leavemoModel.Reason,
                ToWhere = leavemoModel.ToWhere,
                TimeType = leavemoModel.TimeType,

                UserId = userId,

                LeaveStatus = 1,
                AddTime = DateTime.Now,
                ResumeTime = DateTime.Now,
                IsResume = 0,

                Checks = new[]
                {
                    new Check { CheckStatus = 0, CheckTime = DateTime.Now, UserId = int.Parse(userId),CheckOrder = 0}, 
                    new Check { CheckStatus = 0, CheckTime = DateTime.Now, UserId = int.Parse(userId) ,CheckOrder = 1}
                }
            };
            try
            {
                leave = _leaveService.Add(leave);
                if (leave.LeaveId > 0)
                {
                    return RedirectToAction("Success", leave);
                }
                else
                {
                    ModelState.AddModelError("", "请假失败");
                }

            }
            catch (Exception ex)
            {
                ModelState.AddModelError("", "请假失败," + ex.Message);
            }

        }
        return View(leavemoModel);
    }

    [Authorize]
    public ActionResult Success(Leave leave)
    {
        return View(leave);
    }

    [Authorize]
    public ActionResult Detail(int? id)
    {
        if (id == null || id < 1)
        {
            return RedirectToAction("Index");
        }
        var leave = _leaveService.Find((int)id, User.Identity.GetUserId());

        var model = new LeaveDetailViewModel
        {
            Leave = leave,
            Checks = leave.Checks
        };

        return View(model);
    }

    [Authorize]
    [HttpPost]
    public int GetLeaveTimes(string userid)
    {
        return _leaveService.GetLeaveTimes(userid);
    }
}

}
5.6 学生销假
图5.6是学生销假功能模块的界面图,系统会根据登录的学生Id自动查询出学生请假的状态及是否销假,这个界面最大的用处是,学生若要再次请假一定要撤销掉上次的请假才可以继续请假,学生可点击就“销假”,让老师审批销假。
在这里插入图片描述

图5.6 学生销假界面
5.7 学生历史请假
图5.7是学生历史请假模块的界面,该界面主要是学生可以查询自己的历史请假记录、请假状态、销假记录等,学生点击“历史请假”按钮,系统显示出该学生的历史请假信息。
在这里插入图片描述

图5.7 学生历史请假界面
5.8 老师待审请假
以下图5.8是老师待审核请假模块的界面,该界面是老师登录系统后,点击“待审请假”按钮,界面显示出该老师所管理的学生的所有待审核请假信息,老师审批完后,通过点击“通过”或“拒绝”按钮,系统弹出审核意见界面,老师需填写给予学生审核意见,然后点击“确认”后,审核信息传入数据库中,数据转为请假历史信息表中。
在这里插入图片描述

图5.8 待审请假界面
5.9 老师查询历史请假
以下图5.9是老师查询历史请假功能模块的界面,该界面主要是老师查看学生请假历史信息,也可包括老师还未审核完成的学生申请请假信息,可是该界面中的按钮没办法进行“通过”或“拒绝”操作,只能点击“详细”按钮,老师可查看到学生请假信息的详细信息。
在这里插入图片描述

图5.9 老师查询历史请假界面
5.10 老师查询历史销假
以下图5.10是老师查询历史销假功能模块的界面,该界面主要是系统通过老师所绑定管理的学生,显示出所管理学生的销假历史信息,其中包含编号、申请人、申请时间、请假事由、当前状态等信息,老师只能对其进行查阅,但不能进行修改。
在这里插入图片描述

图5.10 老师查询历史销假界面
5.11 老师个人设置
以下图5.11是老师个人设置信息功能模块的界面,该界面老师可以对自己个人信息进行设置,其中包括手机号和办公室,老师确认好信息后,点击“保存”按钮,信息就会保存到老师个人信息的数据库表里。
在这里插入图片描述

图5.11 老师个人设置界面

第6章 系统测试

6.1 测试目的
对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线前,都应该进行充足的测试后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
6.2 功能测试
下表是系统登录功能测试用例,检测了用户名和密码的不同的输入情况,观察系统的情况,查看该功能块是否达到设计预期,如表6.1所示
表6.1系统登录功能测试用例
功能描述 用于系统登录
测试目的 检测登录时的合法性检查
测试数据以及操作 预期结果 实际结果
输入的用户名和密码带有非法字符 提示用户名或者密码错误 与预期结果一致
输入的用户名或者密码为空 提示用户名或者密码错误 与预期结果一致
输入的用户名和密码不存在 提示用户名或者密码错误 与预期结果一致
输入正确的用户名和密码 登录成功 与预期结果一致
下表是用户注册功能测试用例,检测了该模块中对信息包括用户名、密码、邮箱和验证码填写操作是否正确及完整,观察系统的情况,查看该功能块是否达到设计预期,如表6.2所示。
表6.2 系统注册功能测试用例
功能描述 用于用户注册
测试目的 检测注册时的合法性检查
测试数据以及操作 预期结果 实际结果
输入的用户名不合法 提示用户名不符合规则 与预期结果一致
输入的字段为空 提示必填项不能为空 与预期结果一致
输入的邮箱不合法 提示邮箱不符合规则 与预期结果一致
输入的密码少于6位 提示密码必须为6-12位 与预期结果一致
输入的密码少于12 提示密码必须位6-12位 与预期结果一致
下表模块是学生个人信息功能测试用例,检测了该模块中对信息包括手机号、宿舍号、家庭住址、家庭电话填写操作是否成功运行,观察系统的情况,查看该功能块是否达到设计预期,如表6.3所示。
表6.3 学生个人信息测试用例
功能描述 用于用户注册
测试目的 检测注册时的合法性检查
测试数据以及操作 预期结果 实际结果
输入的手机号不合法 提示请输入正确的手机号 与预期结果一致
输入的字段为空 提示必填项不能为空 与预期结果一致
输入的宿舍号不合法 提示请输入正确的宿舍号 与预期结果一致
输入的家庭电话少于7位 提示家庭电话必须为7-12位 与预期结果一致
输入的家庭电话少于12位 提示家庭电话必须位7-12位 与预期结果一致
输入的家庭住址不合法 提示请输入正确的家庭住址 与预期结果一致
下表模块是老师个人信息功能测试用例,测试了该模块中对信息包括手机号、办公室填写操作是否成功运行,观察系统的情况,查看该功能块是否达到设计预期,如表6.4所示。
表6.4 老师个人信息测试用例
功能描述 用于用户注册
测试目的 检测注册时的合法性检查
测试数据以及操作 预期结果 实际结果
输入的手机号不合法 提示请输入正确的手机号 与预期结果一致
输入的字段为空 提示必填项不能为空 与预期结果一致
输入的办公室不合法 提示请输入正确的办公室 与预期结果一致
6.3 性能测试
使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登录,数据查询和数据维护等模块进行并发访问,测试结果是有40个用户并发时,数据管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。

总结与展望

伴随着计算机互联网技术的飞速发展,社会中各行各业都实现采用计算机的技术对日益增长的庞大数据进行管理。该课题是学生网上请假系统为核心进行展开的,主要是实现请假信息化管理和用户现阶段需求。
学生网上管理系统是以C#编程语言为基础,在Visual Studio平台上完成编码工作,系统运用的框架是MVC框架,数据库系统使用的是SQL Sever2008。文中已经详细的分析了学生网上请假系统的研究背景、研究目的和意义、相关技术以及系统功能需求、系统详细设计和系统测试等一系列内容。该系统在实现了所需的一些基本功能,并且通过测试对这些实现的基本功能进行完善,不断地提高了系统的整体实用性。在这次开发中,大量的使用了C#相关的知识,前端开发使用到的html、javascript等,同时也涉及到非常多组件和更新包。
系统开发差不多投入运行时,系统各系统都可以运行正常。系统的每一个界面操作都符合了常规的逻辑,对初始使用者来说操作简单,界面相对美观,还加了操作说明。系统的每个功能设计合理,总体体现了人性化思想。
但是由于自己在系统的开发过程中,一些用到相关更为深入的知识和技术掌握不够老顾,并且我自己的开发经验极度欠缺,所以系统还是有些不够完善和考虑不够周全的地方,待自己日后逐步完善。

参考文献

[1] 宋宇辉,林春梅. 基于ASP.NET的高校教代会提案系统的研究与实现[J]. 信息与电脑(理论版);2018年
[2]高洪涛. .NET分布式软件体系结构的设计应用[J]. 无线互联科技;2018年
[3] 韩立刚.计算机网络(修订版)北京:清华大学出版社,2013年
[4] 杨国,肖祥林. 基于ASP.NETMVC的在线购物网站设计与实现[J]. 教育教学论坛;2017年
[5] 张超,董恬恬. 基于ASP.NET的《计算机应用基础》课程网站的设计[J]. 电脑知识与技术;2016年
[6] 贾宗星. 基于ASP.NET的信息发布网站的设计与实现[J]. 计算机时代;2019年
[7] 韩道军,贾培艳. 新建构主义在ASP.NET MVC Web程序设计课程中的应用[J]. 软件导刊;2018年
[8] 生家锋. 《ASP动态网站》课程教学项目设计与实践研究[J]. 亚太教育;2015年
[9] Christian Nagel;Bill Evjen;Jay Glynn: Professional C# 2008; Wrox Pres;2008
[10] Wagner:Effective C#;Machinery Industry Press;2006年
[11] Liu Quan Zhu Yiwen Li Fangmin Prof.,School of Information Engineering,WUT,Wuhan 430070,China. Information Security Frames Based on VPN Technology .Journal of Wuhan University of Technology, 2003, (05) :3 .
[12] GUO H,CHEN F,WANG Y. A reusable softwarearchitecture model for manufactory managementinformation system[C] .26th IEEE InternationalConference on Computer Software and Application. Oxford: IEEE, 2002,

致 谢

本次设计历时3个多月。在这次毕业设计中,每天都离不开卞丽情指导老师的细心指导,使事情基本顺利。起初我刚开始论文写作时心里是很没有底的,中间也遇到了无数的困难和障碍,不过还好都在同学和老师的互相讨论的帮助下度过了。指导老师也很督促我论文的进度,让我慢慢知道论文的重要性,不厌其烦的帮助我进行论文的修改和改进。另一方面,老师认真负责的工作态度,谨慎的教学指导也给我留下了特别深的感觉,也让我知道的细节决定了很多东西。在此,我特向老师表示由衷的感激。
经历自己对该毕业设计的全过程研究与开发,我的系统从需求分析到实现详细功能,再到最终测试和维护的特殊进展。让我对系统研发有了深层次的理解,也知道一个系统的开发也不是一件容易的事。这次也让我自己的动手能力和单独处理问题的本领有了更好的提升。
最后,在整个系统的开发过程中,我还是要感谢我身边的同学和部分有工作经验的朋友给了我很多的意见,让我加快对问题的解决和项目的设计,我由衷地感谢他们。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值