宿舍管理系统
本科毕业论文(设计)
题目:安徽新华学院学生公寓管理系统设计与开发
姓
学
专
院名:号:1042151214业:系:指导老师:
职称学位:完成时间:2016年5月
教务处制
安徽新华学院本科毕业论文(设计)独创承诺书
本人按照毕业论文(设计)进度计划积极开展实验(调查)研究活动,实事求是地做好
实验(调查)记录,所呈交的毕业论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。据我所知,除文中特别加以标注引用参考文献资料外,论文(设计)中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。毕业论文(设计)作者签名:日期:
安徽新华学院学生公寓管理系统设计与开发
摘要
本论文调查分析了高校公寓传统管理方式和它的不足,为了改进这种
管理方式,弥补它的不足而设计一个采用B/S结构,JSP 技术和MySQL 数据库,拥有一个友好的界面,画面美观,功能简便快捷并较为实用的高
校公寓管理系统。系统管理员可以通过Web 浏览器登录系统后台,实现对
楼宇、学生和宿舍信息的查询、删除、添加,并可查看学生的住宿、访客
以及公告等信息,还有一些辅助功能,如密码修改。
关键词:JSP ;MySQL ;B/S;宿舍管理
Based on the ANHUI XINHUA University dormitory
management system design and implementation
Abstract
This paper analyzes the traditional university dormitory management mode and
the lack of this mode,The paper designed a university dormitory management system.It adopts B/Sstructure, JSP technology and MySQL database, has a friendly interface, the picture is beautiful, function is simple and more practical,otherwise it can improve the mode, make up the lack of it .System administrator can through the Web browser login system background, he can manage the information of building, student, dormitory and can search the information such as student accommodation 、visitors and announcement. In addition the system have some auxiliary functions, such as password modification.
Key Words :JSP ;SQL Sever ;B/S;Dorm Management
目录
1前言.................................................................................................................... 12开发工具和开发环境..................................................................................................................... 3
2.1.1.2javascript ...................................................................................................................................... 3
2.1.1.3java.............................................................................................................. 4
2.1.1.4Struct 框架.................................................................................................. 5
2.2开发环境............................................................................................................................................. 63系统设计................................................................................................................................................ 7
3.1系统分析.......................................................................................................... 7
3.1.1业务流程分析............................................................................................... 7
3.2管理权限划分.................................................................................................. 8
3.2.1管理权限划分的具体实现........................................................................... 9
3.3开发模式........................................................................................................ 10
3.4系统数据库设计.......................................................................................................................... 104系统功能描述及实现............................................................................................................... 14
4.1JDBC 连接数据库模块................................................................................. 14
4.2登录模块........................................................................................................ 14
4.3日常信息管理模块........................................................................................ 17
4.4楼宇管理管理模块........................................................................................ 24
4.4.1宿舍管理..................................................................................................... 25
4.4.2楼宇管理员管理......................................................................................... 26
4.5基本信息维护模块..................................................................................................................... 275问题处理............................................................................................................................................. 29
5.1乱码问题........................................................................................................ 29
5.2系统的可维护性问题.............................................................................................................. 306结束语.............................................................................................................. 32致谢................................................................................................................ 33参考文献.................................................................................................................................................. 34
1前
1.1设计背景言
宿舍,是大学学生在学校的一个重要的学校生活的场所,大学生的一大半时间都是在宿舍度过。随着学校的发展和壮大,许多学生都来到了新华这所繁华而雅致的大学校园,人数增多,学生的管理也将变得比价困难。
目前我校的的宿舍管理工作采用的仍然是手工记录的方式,如果学生数量比较少的时候,手工记录的方式还是比较适合的,但随着我校的不短发发展,学生的数量在不断增加,并且要提高学生的住宿质量和管理效率,而且学生信息量也越来越较庞大,需要记录存档的数据比较多,还用手工的方式进行管理就显得比较困难了,当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也大大降低,而且时间一长会积累大量的文件,不仅占用空间,而且会降低查询信息的效率。另一方来说,每一栋楼所记录的数据不能进行共享和统一管理,很难使宿舍管理正规化,统一化。这里只说了查询时存在的弊端,还有对数据进行修改,或者登记等操作以及在管理宿舍时会发布公告,宿舍管理人员需要发什么通知时,目前只能在楼下的小黑板上,但这在很多情况下常常被我们所忽略。
1.2设计意义
在这个计算机主宰世界的时代,原始的记录方式将无法适应这个时代,通过计算机进行数据的统计和管理以及数据的共享是才能适应这个时代发展步伐。计算机化管理正是适应时代的产物。科技在不断进步,技术在不断更新,更新的速度如此的快,基本都是计算机的功劳,由此看出计算机的能力是非常的强大,所以计算机在任何行业中都有它的身影,特别是现在比较火的电子商务和物流。所以我想为我校设计一个学生宿舍管理系统,使宿舍管理高效、轻松、方便;提高信息处理的速度和准确性;能够及时、准确、有效的查询和修改宿舍情况是很有必要的[1]。
根据我校目前的管理状况和条件,决定开发一款宿舍管理系统,本系统的设计将会以我校学生宿舍管理为参考模型,该系统的主要功能将会以本校的管理方式为依据,实现宿舍管理中常用的管理功能。
1.3系统介绍
本系统中的用户有三种类型,系统管理员、楼宇管理员和学生。根据不同用户类型划需求和工作范畴划分分功能模块,以及功能需求。系统管理员是拥有最高权限的用户,可以进行所有数据的进行修改、删除、查询。楼宇管理员的工作范畴是楼宇以及入住的学生,所以楼宇管理员可以查询学生信息,公告管理,以及学生缺寝登记等属于楼宇管理的工作范畴。学生为最低级的用户,只能够对数据进行读取,不能进行任何改变数据的操作,除了更改自己登陆时的密码。
2开发工具和开发环境
2.1开发工具的选择
2.1.1语言工具
2.1.1.1JSP 编程技术
Jsp 的全称是Java Server Page ,它是由Sun 公司时用java 语言研发出的一种动态网页制作技术,它为建立动态网页提供了一种简单的设计方法,并为开发者提供了一个S 一种框架,这个框架叫struct ,在这个框架的基础上,开发者可以使用HTML ,XML ,JA V A 语言以及其他脚本语言,这样的编程使得动态网页的创建和维护变得更灵活,快速,特别是目前的商业系统[2]。在Sun 正式发布JSP 之后,这种新的Web 应用开发技术很快引起了开发者的关注。JSP 为创建高度动态的Web 应用提供了一个独特的开发环境
[3]。作为JavaTM 技术的一部分,JSP 能够高效地开发出所有Web 服务器和应用服务器环境并独立于平台运行的应用程序,而且它还具有很强的伸缩性。因为JSP 把用户界面从系统内容中分离开来,所以设计人员能够在不改变底层动态内容的前提下改变网页布局[3]。
JSP 编程技术的优势在于:
(1)一次编写,到处运行。在这一方面Java 比PHP 更出色,除了系统之外,代码不用做任何更改[4]。
(2)系统的多平台支持。Jsp 编写出来的程序兼容性非常好,它基本上在所有的平台上都可以进行开发和运行,也可以多个平台上进行扩展。相比ASP/PHP的局限性就大的多。
(3)强大的可伸缩性。它不仅能够设计出小的应用程序,同时也能够用它编写出复杂而强大的应用程序。在网络服务和消息处理上,Java 也显示了其强大的功能。
(4)多种免费而且功能强大的工具支持。从java 出生到现在已经有许多的工具包和工具软件,而且许多都是免费的,如eclipse 。
2.1.1.2javascript
JavaScript 是一种脚本语言,以为它的脚本功能的强大,而使得它在Web 领域的开
发应用的非常广泛,许多程序员使用它实现了不同的动态网页效果,这使得页面更加美观流畅[5]。通常JavaScript 脚本是嵌入在HTML 中来实现自身的功能的。它是一种解释性的语言。主要是实现页面和后台数据的交互功能。它是能够直接写在HTML 文件中,但将它单独写在一个js 文件中,将提高程序的可维护性,并且能够更好将逻辑实现和效果呈现分离开。跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows 、Linux 、Mac 、Android 、iOS 等)。
Javascript 虽然是一种脚本语言,但它也拥有基本的数据结构、表达式以及框架。Javascript 拥有常用的四种数据类型,用来处理数据。变量可以保持数据信息,它的表达式则可以处理这些数据。
2.1.1.3java
Java 是一种拥有极强的兼容性的编程语言,它编写出来的程序时可以跨平台的。同时它也是一门面对象的语言。Java 语言有非常好的通用性、高性能、平台可移植性以及它的安全性,java 这种技术被广泛应用于这种领域,它的主要应用领域是后端的服务器。Java 是由Sun Microsystems 公司推出的Java 面向对象程序设计语言。由James Gosling 和同事们共同研发,并在1995年正式推出。Java 一开始并不叫java ,而是Oak ,它一开始用于嵌入式开发,后来名字改为Java ,并重新设计了它的语法,以用于开发网络服务型的应用程序。用它开发的一款名叫用HotJava 浏览器(支持Java applet )显示了Java 的独到之处。从此,Java 被得到了广泛的应用和肯定,这也推动了web 程序设计的飞速发展,常用的浏览器均支持Javaapplet [6]。另一方面,Java 技术也不断更新。Java 一面世就显示出其强大的能力,并发展迅速,这对一直处在顶端的c++形成了强烈的冲击。在如今的互联网形势下,Java 显示出了卓越的优势和广阔前景。
Java 分为三个体系,分别为Java SE (J2SE ,Java2Platform Standard Edition ,标准版),JavaEE (J2EE ,Java 2Platform, Enterprise Edition ,企业版),Java ME (J2ME ,Java 2Platform Micro Edition ,微型版)。
与其他的编程语言不通,Sun 公司将Java 技术作为一种开放免费的技术进行推出。许多做Java 开发的公司都被要求设计出来的程序要做到相互兼容。Sun 公司对Java 编程语言的解释是:
Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可
移植、高性能、多线程和静态的语言。
Java 是一种相对其他语言都比较强大的语言,可以用它;来开发一些具有非常高的可靠性、要求严格的应用程序。它有一种叫mvc 设计模式,使用这用模式设计出来的程序更具有韧性,MVC 并不适合小型甚至中等规模的应用程序,花费大量时间将MVC 应用到规模并不是很大的应用程序通常会得不偿失[7]。
Java web 的技术使java 在互联网领域也得到广泛应用。Java Web 是用来支撑java 进行互联网设计的。web 包括:web 服务器和web 客户端两部分。在客户端部分的应用有java applet ,不过使用得很少;在服务器端的应用就非常多了,比如说Servlet ,JSP 和struct 等等。Java 技术对Web 领域的发展注入了强大的动力[8]。
2.1.1.4Struct 框架
经过多年的发展,Struts1的稳定性和可靠性得到了广泛的证实。同时它还拥非常完善的框架结构。市场达到了四分之一,拥有很大的开发人员基础,基本已经成为一种设计程序必不可少的标准,但随着时代的发展,技术的快速更新,Struts1的局限性也开始慢慢地暴露出来,这就阻碍了Struts1的继续发展。
在Struts1中,它与JSP/Servlet联系比较紧密,这造成了它们之间的耦合性比较高,而这样会使程序不健康,在对用它设计出来的程序进行修改时会容易产生严重的错误。首先,Struts1支持的表现层技术单一。其次,Struts1与Servlet API 的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1API ,属于侵入性框架[6]。
与其竞争的还有其他的框架,比如JSF 、Tapestry 和spring MVC 等。这些框架都是近期出来的,都吸取了最新的设计思想,同时也提出了struct1的长处,克服了许多短处。而正因为这些框架的竞争也使得struct1得到进步。
如今Struts 已经分化成了两个框架:一个是在Struts1的基础上,融合了另外的一个优秀的Web 框架WebWork 的Struts2[9]。Struts 2虽然是在Struts1的基础上发展起来的,但是实质上是以WebWork 为核心的。Struts2其实是将struct1汇中加入了先进的WebWork 的设计思想,将这两者进行了融合。
Struts1分化出来的另外一个框架是Shale 。这个框架脱离了struct1原有的设计思想,与struct1有关联的内容比较少,它使用了全新的设计思想。Shale 更像一个新的框架而不是Struts1的升级。
Struct2的框架结构与之前的struct1的框架结构有很大的差别。Struct2是以webwork 这种设计思想为核心,用拦截器的机制来处理页面交互请求,这样的设计时可以将逻辑和页面交互分开的,所以Struts 2可以看做是WebWork 的改进版。对于struct1来说,struct2的变化比较大,但对WebWork 来说,Struts 2的变化就非常小。
2.1.2软件工具
2.1.2.1MYSQL 数据库
MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 公司。关联数据库保存数据的方式不是将数据放在一起,而是将它们分开,一种类型的数据放在一个表中,这种保存数据的方式也使得数据的查询、删除、修改等操作变得快速。MySQL 的SQL 语言是用于访问数据库的最常用标准化语言[10]。虽然sql 的数据访问非常快,但根据不同的需求,优化数据查询的方法,提高系统的数据库访问性能,缩短查询访问的时间,减少了查询的数据量,进而提高了系统数据库的访问效率也是非常必要的[11]。根据它的特点,一般中小型网站的开发都会选择MySQL 作为网站数据库。
2.2开发环境
该系统的开发环境如下:
(1)服务器端操作系统:采用Microsoft Window8.1版本。(2)数据库:MYSQL1.3服务器版本。(3)Web服务器:tomcat 服务器。
(4)客户端运行环境:能运行IE 4.0以上或Netscape 4.5以上浏览器的操作系统。
3系统设计
3.1系统分析
进行系统分析的主要目的是看这个系统的可执行性,它是否值得进行开发,并且后期它能够拥有非常高的使用价值。当然必要的步骤也是要有的,如系统的基本架构和设计,还有文档说明,以便在编写程序时有一个思路;其次是这个系统要实现那些功能能够满足用户的需求,判定开发出来的软件是否成功的标准之一就是看它有无实用性[12]。
通过对本校宿舍管理需求的调查,了解了各层对象的功能需求,分析得出了本系统使用者的机构图,如图3.1
所示。
图3.1系统使用者的机构图
3.1.1业务流程分析
本阶段根据校园宿舍规模并和宿舍管理人员沟通,对现行的工作流程进行了详细咨询,根据咨询的内容对业务流程做了具体分析,并给出了系统的宿舍管理流程。
学生宿舍管理是以楼宇、班级、宿舍、学生为单位进行统计,学校宿舍管理统计学生宿舍管理情况;信息传递要经过多个环节,不能及时得到反馈。学生管理添加学生信息,将信息登记宿舍管理系统中。如图3.2所示。
安徽新华学院
2016届本科毕业论文(设计)
图3.2学生登记入住流畅图
宿舍管理中心将入住的学生信息递交给楼宇管理员,管理员进行手工登记入住学生的基本信息,学生缺勤登记要手动进行查找,其他信息的查找也一样,在登记时常也会写错,这还需要用修改工具进行修改。管理员通知学生相关信息还用黑板进行通知,学生长时间阅读公告容易造成通道拥挤,经过组织结构分析和业务流程分析后,具体分析了功能需求,详细如下:
(1)楼宇管理:对管理员账号的管理、楼宇添加、宿舍添加、添加管理员、外来人员。(2)学生管理:学生登记、入住登记、迁出登记、调换宿舍、缺寝登记。(3)信息查询:学生查询、楼宇浏览、宿舍浏览、公告浏览。(4)其他:用户密码修改、公告、退出系统。
3.2管理权限划分
权限划分是描述系统的一个过程,需要将需求分析中的感性描述进行抽象,提取出要实现的功能,这是整个系统开发的一个关键过程[13]。在系统分析的基础上,确定了系统的功能结构。
在业务流程分析的基础上,对系统的不同操作用户,提供不同的功能和服务。为了明确分工和提供的服务功能,提高工作效率,以及考虑到数据的安全性,在系统中对不同的用户进行了权限划分。对于系统管理员,他需要掌握所有的信息和管理信息,方便数据库的维护,所以他拥有最高操作权限,及拥有系统的所有功能和服务;楼宇管理员的工作是查询学生信息(只拥有本楼宇的学生),对学生进行缺寝登记,如果有外来人员进入就管理外来人员的进出入;学生只能进行信息的查询和修改密码,学生拥有查询自己的缺寝情况,浏览公告。不同用户的基本功能都要拥有,如密码修改,退出系统,浏览公告。如图3.3所示。
安徽新华学院
2016届本科毕业论文(设计)
图3.3权限管理划分图
3.2.1管理权限划分的具体实现
在功能模块划分时,考虑到后期维护和修改,避免逻辑混乱和bug 存在,将两个主要的系统用户的逻辑和界面分开进行编写和设计,这样设计是考虑两个用户要实现的功能虽是包含关系,但需要的结果和操作并不一致,并且如果两者功能如果写在一起,容易使逻辑混乱,容易出现bug ,也不便于后期的维护和完善,因此为了使权限换分的更为清楚,在设计时便将系统管理员和楼宇管理者对学生的管理功能进行了分开实现。学生为最低级的用户,只能对自己的相关数据和公共数据进行访问,他的功能模块并不与其他两种用户的功能有包含关系,也考虑到同上的问题,也将其功能单独实现。
在设计中,导航栏是用户进行操作的重要指示器,它为用户提供了本系统的功能导航,让用户能够很快的上手操作,并找到自己需要的信息和功能,因此将功能模块的显示写成导航栏的形式。
考虑到不同的用户需要不同的导航栏,但也不能在每个页面都添加一次导航栏的程序代码,这样就会使代码显得冗余,而且也不利于对导航栏内容的修改和添加。因此将导航栏实现的程序代码写到单独的文件中,利用javascript 编程技术,将文件引入到其他的显示文件中,通过传来的用户类型进行设置导航栏要显示的功能模块。在用户登录的时候有一个用户类型选项,登录成功之后会将用户类型保存到会话当中,进入到功能界面时,首页读取用户类型信息并进行判断,根据用户类型显示不同的功能导航栏。
安徽新华学院
2016届本科毕业论文(设计)
3.3开发模式
对于本系统,它要存在的目的是将宿舍管理的方式改变,提升管理效率。它的功能要能够满足平时学生宿舍管理的需求,同时能够满足不同用户的需求,以及完成宿舍管理、学生登记等环节的处理。由于系统数据收集的实时性要求不高,因此采用Browser/Server结构来进行设计是可行的[14]。图3.4是本系统的网络应用原理示意图。
图3.4宿舍管理系统原理示意图
3.4系统数据库设计
本系统设计的另一个重点就是数据库设计。数据是设计的基础,它的数据结构决定着系统在数据操作上的实现,简单来说,数据库设计就像高楼大厦的根基一样,如果数据库设计的不好,这不仅影响到程序的设计过程,同时也影响到系统的后期维护,会产生许多错误,如果严重的话,可能这个系统就要重新设计。
本系统的数据库的设计是将不同的数据保存到不同的数据表中,本系统主要有以下几种表,系统管理员的信息表,楼宇管理员的信息表,楼宇信息表,宿舍信息表,学生信息表,公告表,学生缺寝记录表,楼宇与管理员关联表。系统中有一个超级管理员,负责系统处理的控制,管理所有表的信息,其他的都是普通管理员。管理员登录时使用用户名和密码登录。全部数据表的字段说明如下所示。
(1)admin(系统管理员信息表)
系统管理员信息表存储了系统管理员的基本信息。字段属性描述如表3-5所示。
表3-5系统管理员信息表
字段名Admin_IDAdmin_UsernameAdmin_PasswordAdmin_NameAdmin_SexAdmin_Tel
字段类型Int Varchar Varchar Varchar Varchar Varchar
字段长度
[1**********]
是否主键是否否否否否
描述主键Id 系统管理员用户名
登录密码系统管理员名字系统管理员性别系统管理员电话
(2)broadcast(公告信息表)
公告信息表存储了公告的各项基本信息。字段属性描述如表3-6所示。
表3-6公告信息表
字段名Broad_IDBroad_DateBroad_TypeBroad_Value
字段类型Int Varchar Varchar Varchar
字段长度
4202010000
是否主键
是否否否
描述主键Id 公告时期公告类型公告内容
(3)building(楼宇信息表)
楼宇信息表存储楼宇的基本信息。字段属性描述如表3-7所示。
表3-7楼宇信息表
字段名Building_IDBuilding_NameBuilding_Max
字段类型Int Varchar Varchar
字段长度
45020
是否主键
是否否
描述主键Id 楼宇名称最大入住人数
(4)domitory(宿舍信息表)
宿舍信息表存储了宿舍的基本信息。字段属性描述如表3-8。
表3-8宿舍信息表
字段名Domitory_IDDomitory_BuildingIDDomitory_NameDomitory_TypeDomitory_NumberDomitory_Accordimation
Domitory_Tel
字段类型Int Int Varchar Varchar Varchar Varchar Varchar
字段长度
[1**********]0
是否主键
是否否否否否否
描述编号宿舍的楼宇id
宿舍号宿舍类型宿舍现住人数宿舍可入住人数宿舍固定电话
(5)student(学生信息表)
学生信息表存储了学生的各项基本信息。字段属性描述如表3-9所示。
表3-9学生信息表
字段名Student_IDStudent_DomitoryIDStudent_UsernameStudent_NameStudent_SexStudent_ClassStudent_StateStudent_PictureStudent_Domitoryname
字段类型Int Int Varchar Varchar datetime Varchar Varchar Varchar Varchar
字段长度
[**************]0
是否主键
是否否否否否否否否
描述主键Id 入住楼宇id
账号密码性别班级住宿状态学生照片名称所在宿舍名称
(6)teacher(楼宇管理员信息表)
楼宇管理员信息表存储了楼宇管理员的各项基本信息。字段属性描述如表3-10。
表3-10楼宇管理员信息表
字段名
字段类型Int Varchar Varchar Varchar Varchar Varchar Varchar
字段长度
[1**********]020
是否主键
是否否否否否否
描述主键Id 管理员账号管理员密码管理员姓名管理员性别管理员电话管理员照片名称
Teacher_ID
Teacher_UsernameTeacher_PasswordTeacher_NameTeacher_SexTeacher_TelTeacher_Img
(7)outerr(外来人员登记信息表)
外来人员登记信息表存储了外来人员的基本信息。字段属性描述如表3-11。
表3-11外来人员登记信息表
字段名Outer_IDOuter_NameOuter_SexOuter_NumberOuter_IndateOuter_OutdateOuterBuilding_ID
字段类型Int Varchar Varchar Varchar Varchar Varchar Int
字段长度
[1**********]4是否主键
是否否否否否否
描述编号姓名性别号码进入时间离开时间进入的楼宇ID
(8)log(学生缺寝信息表)
学生缺寝信息表存储学生缺寝的信息。字段属性描述如表3-12。
表3-12学生缺寝信息表
字段名Log_IDLog_StudentIDLog_TeacherIDLog_DateLog_RemarkLog_BuildingID
字段类型Int Int Int Varchar Varchar Int
字段长度
44420204
是否主键
是否否否否否
描述编号学生ID 管理员ID 缺寝时间备注楼宇ID
4系统功能描述及实现
4.1JDBC 连接数据库模块
JDBC (Java Data Base Connectivity.java 数据库连接)是一种用于执行SQL 语句的Java API [7],可以为多种关系数据库提供统一访问,它由一组用Java 语言编写的类和接口组成。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,从而使数据库开发人员能够编写数据库应用程序[15]。本系统的数据库连接就是通过JDBC 连接的数据库。其中连接数据库的代码如下:
private String dbUrl="jdbc:mysql://localhost:3306/sushe";private String dbUser="root";private String dbPassword="123456";
private String jdbcName="com.mysql.jdbc.Driver";//连接数据库
public Connection getConn(){
Connection conn =null; try{
Class.forName(jdbcName);}
catch(Exceptione){}try{
conn=DriverManager.getConnection(dbUrl,dbUser,dbPassword);}
catch(SQLExceptionex){}return conn; }
4.2登录模块
在用户进入系统之后,会进入到登录界面,如果直接访问其他界面会进行提示(请先登录),当点击确定之后会自动跳转到登录界面,实现代码如下:
//创建session 对象
HttpSession session =ServletActionContext.getRequest().getSession();
//验证是否正常登录
if(session.getAttribute("id")==null){out.print("");
out.flush();out.close();returnnull;
}
在登录页面中选择用户类型,输入用户名、密码以及验证码,然后单击登录按钮,页面将负责处理登录请求,验证用户身份和信息,完成登录。登录页面如图4.1
所示。
图4.1登录页面
从登录模块可以看出,当用户进行身份验证后,可能会出现的几种情况,包括验证通和循环身份验证。如果用户是一个正常的用户,可以说第一次就能够通过验证,通过验证之后,那么这个用户就可以进行后续的操作,并将用户的类型和用户的ID 保存到回话当中。实现代码如下:
if(Type.equals("系统管理员"))
{if(null==new AdminDao().CheckLogin(Username,Password))
{Msg=" 用户名或者密码错误";return INPUT;}
else//标记登录身份设定用户权限
{StringAdmin_ID=newAdminDao().CheckLogin(Username,Password);
HttpSession session =ServletActionContext.getRequest().getSession();
session.setAttribute("id",Admin_ID);
session.setAttribute("type","1");
return SUCCESS;}}
else if(Type.equals("楼宇管理员"))
{if(null==new TeacherDao().CheckLogin(Username,Password)) {
Msg =" 用户名或者密码错误";return INPUT;}else
{StringTeacher_ID=newTeacherDao().CheckLogin(Username,Password);
HttpSession session =ServletActionContext.getRequest().getSession();
session.setAttribute("id",Teacher_ID);
session.setAttribute("type","2");
return SUCCESS;}}elseif(Type.equals("学生"))
{if(null==new StudentDao().CheckLogin(Username,Password)) {
Msg =" 用户名或者密码错误";
return INPUT;}else{
String Student_ID=newStudentDao().CheckLogin(Username,Password);
HttpSession session =ServletActionContext.getRequest().getSession();
session.setAttribute("id",Student_ID);
session.setAttribute("type","3");
return SUCCESS; }}else{
Msg =" 身份类型错误";
return INPUT;}}
在对业务进行了基本的划分之后,可以对模块进行基本的流程分析,包括这个模块中最基本的函数,以及这些函数在页面中是如何执行的。首先是登录模块需要提供哪些
登录信息,登录模块中最重要的就是用户类型、用户名以及密码,登录模块通常情况下要通过用户类型进行权限的判断,不同的用户类型信息存储在不同的表中。管理员的用户信息存储在Admin 表中。
管理员登录验证用户名和密码的核心代码为:
public String CheckLogin(Stringusername, String password){
String id =null;
String sql="select*from Admin where Admin_Username='"+username+"'
and Admin_Password='"+password+"'";
Statement stat =null; ResultSet rs =null;
Connection conn =new DBHelper().getConn();
try{stat=conn.createStatement();
rs =stat.executeQuery(sql);
while (rs.next()){
id =rs.getString("Admin_ID");
catch(SQLExceptionex){}}}return id;}
此处通过Action 封装的用户请求参数获取前台传过来的用户名和密码以及用户类型,通过sql 语句查询此用户名和密码的用户是否存在,如果存在的话就将用户的ID 结果返回,这样查询的结果不为空,登录成功;否则,说明用户名和密码错误,则会抛出错误信息,并不会进行界面的跳转。
4.3日常信息管理模块
系统主要的管理模块包括日常信息管理、楼宇管理、信息维护。其中日常管理包括入住管理、迁出管理、外来人员管理、迁出管理、公告管理。实现的功能主要包括查询、登记、编辑、修改等。各部分之间的模块图如图4.2所示。
图4.2管理模块图
在对学生进行入住管理的时候,首先学生先要进行登记,学生登记的默认状态是:“未入住”,然后才能对其进行入住登记。其中学生添加类界面如下图4.3所示。
图4.3晚归管理添加界面
其中关键代码为:
public void Add(StudentBeancnbean){
String sql="insertinto Student (";
sql+="Student_DomitoryID,Student_Domitoryname,Student_Username,Student_Password,Student_Name,Student_Sex,Student_Class,Student_State,Student_Picture";
sql+=")values(";
sql+="'"+cnbean.getStudent_DomitoryID()+"','"+cnbean.getStudent_Domitoryname()+"','"+cnbean.getStudent_Username()+"','"+cnbean.getStudent_Password()+"','"+cnbean.getStudent_Name()+"','"+cnbean.getStudent_Sex()+"','"+cnbean.getStudent_Class()+"','"+cnbean.getStudent_State()+"','"+cnbean.getStudent_Username()+".jpg"+"'";
sql+=")";
Statement stat =null; ResultSet rs =null;
Connection conn =new DBHelper().getConn();
try{stat=conn.createStatement();
stat.executeUpdate(sql);
}catch (SQLExceptione) {
e.printStackTrace();
}finally {try{if(conn!=null)
conn.close();if(stat!=null)stat.close();
if (rs!=null)rs.close();}catch (SQLExceptione) {
e.printStackTrace();}}}
当学生到达学校并确认入住时,就可以对其进行入住登记,入住登记的界面如图4.4
所示。
图4.4入住登记界面
其中关键代码如下:
StudentBean sbean=newStudentBean();
Listlist=new
StudentDao().GetAllList("Student_Username='"+Student_Username+"'","");
if(list.size()
out.flush();out.close();returnnull;}else{sbean=new
StudentDao().GetAllFirstBean("Student_Username='"+Student_Username+"'");
if(!(sbean.getStudent_State().equals("未入住"))){
out.print("");
out.flush();out.close();returnnull; }}
StudentBean cnbean=newStudentBean();
cnbean=newStudentDao().GetAllBean(sbean.getStudent_ID());
cnbean.setStudent_State("入住");
BuildingBean build=newBuildingBean();
build=newBuildingDao().GetFirstBean(Building_ID);
DomitoryBean db=newDomitoryBean();
Listlist1=newArrayList();
list1=newDomitoryDao().GetFirstBean(build.getBuilding_ID());
for (DomitoryBeand :list1) {
if(d.getDomitory_Name().equals(Domitory_ID)){db=d;}}
if(Integer.parseInt(db.getDomitory_Number())==Integer.parseInt(db.getDomitory_Accordimation())){out.print("");out.flush();out.close();returnnull; }
if(isInvalid(db.getDomitory_Name())){out.print("");
out.flush();out.close();returnnull;}intnumber=0;
number=Integer.parseInt(db.getDomitory_Number());
db.setDomitory_Number(number+1+"");new DomitoryDao().Update(db);
cnbean.setStudent_DomitoryID(db.getDomitory_ID());
cnbean.setStudent_Domitoryname(db.getDomitory_Name());
new StudentDao().Update(cnbean);//跳转
out.print("");
out.flush();out.close();returnnull;
在学生入住之后就可以对其进行查询管理,如果有学生彻夜未归的情况,就查询到这个学生(查询界面如图4.5),对其进行缺寝记录登记,学生缺寝登记界面如图4.6
所示。
图4.5
查询界面
图4.6学生缺寝登记界面
其中关键代码下:
LogBean cnbean=newLogBean();
cnbean.setLog_StudentID(Integer.parseInt(Log_StudentID));
cnbean.setLog_TeacherID(Integer.parseInt(session.getAttribute("id").toString()));
cnbean.setLog_Date(Log_Date);
cnbean.setLog_Remark(Log_Remark);
cnbean.setLog_BuildingID(Integer.parseInt(session.getAttribute("buildingid").toString()));
new LogDao().Add(cnbean);
//跳转"javascript:history.back(-1);"
out.print("");
out.flush();out.close();
当学生毕业之后就需要将其从楼宇中迁出,一旦迁出就无法修改,并保存到迁出记录中。迁出学生的界面如图4.7所示,迁出成功之后就会有记录,如图4.8
所示。
图4.7迁出学生界面
图4.8迁出记录界面
其中关键代码如下:
StudentBean cnbean=newStudentBean();
cnbean=new
StudentDao().GetFirstBean("Student_Username='"+Student_ID+"'");
cnbean.setStudent_State("迁出");
new StudentDao().Update(cnbean);
DomitoryBean db=newDomitoryBean();
db=newDomitoryDao().GetBean(cnbean.getStudent_DomitoryID());
db.setDomitory_Number(Integer.parseInt(db.getDomitory_Number())-1+"");
new DomitoryDao().Update(db);
OutBean outbean=newOutBean();
outbean.setOut_StudentID(Integer.parseInt(Student_ID));
outbean.setOut_Date(getNowdate());
outbean.setOut_Remark(Out_Remark);
new OutDao().Add(outbean);
out.print("");
out.flush();out.close();returnnull;
在楼宇管理员管理楼宇时,有时会有外来人员进入,这时管理员可以对其进行基本信息的登记备案,记录外来人员的进入和离开的时间。外来人员登记的界面如图4.9所示。
图4.9外来人员登记界面
其中关键代码如下:
OuterBean cnbean=newOuterBean();
cnbean.setOuter_Name(Outer_Name);
cnbean.setOuter_Number(Outer_Number);
cnbean.setOuter_Indate(Outer_Indate);
cnbean.setOuter_Outdate(Outer_Outdate);
cnbean.setOuter_Sex(Outer_Sex);
cnbean.setOuterBuilding_ID(Building_ID);
new OuterDao().Add(cnbean);
out.print("");
out.flush();out.close();returnnull;
4.4楼宇管理管理模块
系统主要的管理模块有日常信息管理、楼宇管理、信息维护。日常管理在上一节中已经叙述。楼宇管理包括宿舍楼管理、楼宇管理员管理。实现的功能主要包括登记、编辑、修改等。其模块图如图4.10所示。
图4.10信息管理模块图
4.4.1宿舍管理
其中宿舍信息管理界面如下图4.11所示。
图4.11宿舍信息管理界面
其中添加宿舍的代码为:
public void Add(DomitoryBeancnbean){
String sql="insertinto Domitory (";
sql+="Domitory_BuildingID,Domitory_Name,Domitory_Type,Domitory_Number,Domitory_Accordimation";
sql+=")values(";
sql+="'"+cnbean.getDomitory_BuildingID()+"','"+cnbean.getDomitory_Name()+"','"+cnbean.getDomitory_Type()+"','"+0+"','"+cnbean.getDomitory_Accordimation()+"'";
sql+=")";Statementstat =null;ResultSet rs =null;
Connection conn =new DBHelper().getConn();
try{stat=conn.createStatement();
stat.executeUpdate(sql);
}catch (SQLExceptione) {
e.printStackTrace();
}finally {try{if(conn!=null)conn.close();
if (stat!=null) stat.close();
if (rs!=null)rs.close();
}catch (SQLExceptione) {e.printStackTrace();}}}
4.4.2楼宇管理员管理
其中楼宇管理员管理界面如下图4.12
所示。
图4.12楼宇管理员管理界面
其中添加楼宇管理员的关键代码为:
public void Add(TeacherBeancnbean){
String sql="insertinto Teacher (";
sql+="Teacher_Username,Teacher_Password,Teacher_Name,Teacher_Sex,Teacher_T
el,Teacher_Img";
sql+=")values(";
sql+="'"+cnbean.getTeacher_Username()+"','"+cnbean.getTeacher_Password()+"','"+cnbean.getTeacher_Name()+"','"+cnbean.getTeacher_Sex()+"','"+cnbean.getTeacher_Tel()+"','"+cnbean.getTeacher_Username()+".jpg"+"'";
安徽新华学院
2016届本科毕业论文(设计)
sql+=")";Statement stat =null;
ResultSet rs =null;
Connection conn =new DBHelper().getConn();
try{stat=conn.createStatement();
stat.executeUpdate(sql);
}catch (SQLExceptione) {
e.printStackTrace();
}finally {try{if(conn!=null)conn.close();
if (stat!=null)stat.close();
if (rs!=null)rs.close();
}catch (SQLExceptione) {
e.printStackTrace();}}}
4.5基本信息维护模块
系统主要的管理模块有日常信息管理、楼宇管理、信息维护等几个部分,其中信息维护包括各种数据的添加、修改、删除等操作,其中也包括修改个人信息和修改密码。考虑到信息的安全和可靠性,就不允许自己修改基本信息,只能修改登录时所用的密码。
(1)其中修改个人信息管理功能如图4.13所示。
图4.13个人信息管理
(2)其中修改密码管理界面主要包括个人密码的修改,信息提交等功能,实现个人密码修改功能的流程图如图4.14所示
图4.14修改密码流程图
每个用户都可以进行密码修改,修改的时候会让用户提供原始密码,以确定为本人操作,为用户提供安全的数据保护。
5问题处理
5.1乱码问题
Java (包括JSP )源文件中很可能包含有中文,而Java 和JSP 源文件的保存方式是基于字节流的,如果Java 和JSP 编译成class 文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。另外在HTML 页面中,也是由于页面的编码与浏览器解释所用的编码不一致,导致出现乱码.
(1)解决jsp 页面中的中文问题:
pageEncoding 是jsp 文件本身的编码,contentType 的charset 是指服务器发送给客户端时的内容编码
(2)解决页面数据传输的中文问题:
最佳方法是采用编码过滤器来解决,设置一个过滤器把所有的数据都进行转, 这样是最省事的,但这样也有它的弊端,就是不够灵活,将所有的数据都转成统一的格式。所以本系统是在class 文件中进行数据格式的设置。
//解决乱码,用于页面输出
HttpServletResponse response=null;
response=ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out =response.getWriter();
(3)解决数据库乱码问题
修改数据库的编码形式,不能够在dos 中进行设置,以为在dos 中设置的只在第一次有效,如果重新启动数据库,它的编码形式有会回到原来的值。所以要更改它的my.ini 文件中的代码。修改如下:
①在[mysql]标签下加上一行
default-character-set =utf8
②在[mysqld]标签下加上三行
default-character-set =utf8
character-set-server =utf8
collation-server =utf8_general_ci
init_connect='SET collation_connection=utf8_general_ci'
init_connect='SET NAMES utf8'
lower_case_table_names=1
③在[mysql.server]标签下加上一行
default-character-set =utf
④在[mysqld_safe]标签下加上一行
default-character-set =utf8
⑤在[client]标签下加上一行
default-character-set =utf8//表名不区分大小写(此与编码无关)
5.2系统的可维护性问题
系统的可维护性就是说对系统的读解、修正、扩展的简易程度。软件从投入使用到弃用期间都是它的维护阶段。程序的可维护性直接影响到在维护中需要消耗的成本,所以本系统在设计过程中也考虑到了它的可维护性。如果一个系统足够复杂,那么它的可维护性将成为不可避免的约束。
本系统在可维护性方面做了特殊的程序的设计。就是分割系统,将系统中逻辑功能模块都尽可能的分开,并降低模块之间的耦合性。一定要坚持这种做法,这样才能保证在系统的开发过程中,才能使应用程序拥有很好的可维护性。具体方法有:
(1)逻辑分割
在网页设计上,导航栏是重要的功能导航模块,而每个网页都需要有这个导航栏,考虑到维护时需要添加功能和划分权限等,没必要在每个网页都要修改一遍,本系统就将导航栏单独的写在一个文件中;以数据库的数据为划分标准,将查询同一个表的数据库查询代码放在一起,而网页的编写和处理网页上提交的逻辑代码,按照功能进行划分,每一个功能都单独写在一个文件中,并将实现某一功能的网页代码文件和逻辑处理文件的文件名起相同的名字,这样就知道它们之间的关系。
(2)编程规范
编程规范通常是一种程序员之间所共识的一种编程风格,一些常见编程风格,比
如K&R,Java 编程规范。
①适当的空格,比如if (condition){};callFunction(arg1,arg2, ..., argN) ;
②适当的分行,一条执行语句要使用一行;
③命名规范,比如,类名首字母要大写,常量名字母都大写,方法名的每个
单词的首字母大写等
④必要的注释,在程序代码中要适当的进行注释,这样在维护时能够更快速的
理解程序逻辑;
⑤使用简单的逻辑和简洁的代码。
(3)使用的技术
使用的技术也是影响系统的可维护性的因素。比如在设计网络服务上,如果使用以前的技术进行编写,而不使用如struct 这样的技术,那么不仅在系统维护时会耗费更多的资源,同时它的性能也会受到影响。当然也不能使用最新的技术,一方面它的技术可能还不够成熟,一方面懂得新技术的人才也不多,所以在使用技术方面,还是首先考虑比较成熟,并拥有很高的使用率的技术。
(4)设计
系统在设计过程中,都首先要进行设计,如果设计不好,那么程序研发时间会延长,消耗资源也会变多,同时在后期的维护中也会变多困难。一个好的设计,它的逻辑思路清楚,框架清晰,模块划分深入到每个小细节..
(5)对维护的意识
在编程过程中时刻要拥有这种意识,编写程序时能够在可维护性的基础上进行编程。这种编程时间一长就会在编程过程中总结出经验,就会知道怎样编程会提高系统的可维护性。如果公司将这种编程风格变成一个规范,那么这将为公司节省不少的维护成本。
6结束语
本系统经过数周的分析和调查,根据网上一流的校园宿舍管系统的功能模块以及工作内容进行开发,实现了系统预期的功能。将视图层与业务逻辑层进行分离[8],保证了系统的安全性,使系统更便于维护。
在系统的开发前期,必须要搞清楚开发对象的业务逻辑思路和工作管理流程。随着需求分析的深入研究,逐渐确定所要开发的功能模块需要实现哪些业务逻辑。由于初期的需求分析不够,导致后期的代码编写时会缺少部分功能,导致多次要进行返工。在编写代码时也遇到了不少困难,如struct 技术以及相关业务逻辑知识学习的不够深入,后台数据在前台呈现出的时乱码,思路混乱导致出现许多小问题等,但通过查资料和向指导老师请教以及自身学习研究相关技术,参考别人的优秀代码和逻辑思路,在技术上自己的能力有所提高、在业务逻辑上也逐渐滤清思路,最终完成了程序。
通过这次的程序设计,了解了信息管理系统的开发过程。从系统目的定义、需求分析,到随后的功能模块设计、详细设计等,对软件整体开发流程有了了解并付诸于实践。同时对信息管理的业务流程有了一个系统的认识,在研究系统的过程中也发现自身在那些地方的知识储备不够,那些地方还需要延伸。在今后的工作和学习中,随着经验的积累和新技术的学习,更详尽的、系统的将知识和技术应用到实际程序开发过程中。
致谢
从申报课题到现在完成毕业论文设计的这段时间里,我最想感谢的是我的导师:刘丽讲师。我在刘丽老师的指导和帮助下完成了这次系统设计,同时她在心理上的也给我很大的关怀,在我失落和挫败的时候,她鼓励我。在我设计系统的过程中她向我提供了相关的参考书籍和指导意见,在我没有方向和思路的时候,她给予我启发,并耐心的教我修改论文,非常感谢你,亲爱的刘丽导师!
同时我还要感谢那些帮助过我的朋友,他们也为我提供了不少的参考资料和相关技术文献,有的也会指导我编写方法,并为我的论文提出了许多宝贵的意见,这使我少走了不少弯路。还有我也要感谢胡俊、陈红等老师这一年来的精心栽培,使我拥有的比较扎实的基础,也掌握了常用的技术。感谢我的父母给予我生活上的保障,同时还要感谢我的挚友汪义东,他给了我不少技术上的指导和心理上的支持。
本次论文的完成,学校为我提供了便利的条件和开发环境,图书馆是我的资料库,实验室是我的研发室,而我的指导老师更是认真负责的指导我每一个阶段要完成的任务。完成毕业设计的过程中我深刻认识到学习是一个很严谨的过程,有付出必有回报。
最后,我由衷的感谢他们对于我在毕业论文的设计过程中的帮助和支持!
参考文献
[1]王佳宝. 基于Java Web 的学生社团管理系统的设计与实现[D].吉林:吉林大学2014.
[2]孙鑫.servlet/jsp深入详解[M],北京:电子工业出版社,2013:10-15.
[3]马建红.jsp 应用与开发技术[M],北京:清华大学出版社,2014:30-38.
[4]杨昭兵.JavaBean 技术在WEB 开发中的应用[J].福建电脑,2013,30(2):15-38.
[5]吴玉. 基于Web 和JSP/JavaBean技术的远程教育系统的设计与实现[J].计算机与现代化,2005,27(11):10-40.
[6]高翔,李志浩.Java web 开发实践[D].吉林:人民邮电出版社,2014.
[7]田丰.Java MVC 模式在管理信息系统开发中的应用[J].中小企业管理与科技,2012,30(9):10-25.
[8]高翔,李志浩.java web 开发与实践[M].北京:人民邮电出版社,2014:50-55.
[9]朱彬,王安保. 用Struts 框架建立JavaWeb 款应用程序[J],计算机辅助工程,2013,10(12):10-25.
[10]张辉. 基于JSP 的MySQL 数据库访问技术[C].电子科技集团公司电子科学研究院,学报. 北京:人民邮电出版社,2015:20-36.
[11]赵利庆.Java Web 架构中数据库优化模式的研究与实现[J].计算机技术.2015,12(3):
5-12.
[12]王容,尹志杰,赵兰兰. 基于Web Service 的水情信息交换系统设计与实现[J].《水利信息化》.2014,10(3):1-7.
[13]杨光豹. 基于拦截器的用户权限管理的分析与设计[C].浙江:浙江广播电视大学青田学院,论文集,2014:13-20.
[14]李宁. 刘岩java web 编程实战宝典[M].北京:清华大学出版社,2015:5-9.
[15]卢海.java Web 开发实战1200例[M].北京:清华大学出版社,2014:5-30.