1、1 引言11 课题背景 计算机技术的日益发展,使得计算机已经应用到生活的各个方面,而近几年我国在教育方面的改革,使大学生也是越来越多,这就带来一个学校在后勤管理方面的重要问题1。在以前,学生数量少,所以许多工作都是靠人工操作,然而现在面对学生人数越来越多的现实,效率低下,出错率高等缺点就暴露无遗,而且已经远远达不到现在提倡的高效的,节约资源的管理需求,因此,能够设计开发一个大学生宿舍管理系统是迎合时代快速发展的必然选择。12 研究课题的目的和意义高校学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可
2、以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的2。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我针对以上情况,设计了一套高校学生宿舍管理系统3。学生宿舍管理系统采用的是计算机化管理,系
3、统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的高校提供了一个方便、快捷的操作方式。本系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的报表生成、修改等功能,能够快速的查询学校所需的住宿信息4。13 国内外研究现状及发展趋势随着社会信息技术的提高,计算机已被广泛应用于当今社会的各个领域5。使得人们在于管理、应用及服务等各个领域使用数据方面变得更加简洁、更加方便、大大提高了工作效率,产生了以计算机为主体,以人为辅助的局面6。计算机管理信息系
4、统它主要具有数学处理,计划,控制,预测,和辅助决策等功能。据统计,目前美国在计划管理中8090%的工作由计算机完成,财务会计工作中超过90%的信息处理由计算机完成,人事管理领域中计算机由计算机的应用更是接近了100%。在企业管理中,办公自动化等方面得到了普遍应用,受到用户的广泛欢迎7。学生宿舍管理系统对于一个学校来说是必不可少的组成部分。因此,现阶段学生宿舍管理系统的研究受到很多人的关注8。就目前而言,现在国内也有一些相当优秀的软件出现。如文达学生宿舍管理系统,它针对学生社区管理工作,设计图形化操作界面,方便学生社区生活基本住处管理,如学生的入住、注销等情况的处理;实用的通讯工具,支持同时管理
5、学生和教职工;支持图像扫描和照片管理;支持按组别、年龄、姓氏等条件进行快速搜索;支持快速条件功能;支持快速查找功能,可以根据支持按宿舍楼号、寝室号进行查找;支持自定义的常用条件筛选功能;支持全国的行政区划、邮政编码、电话号码、常用电话查询功能9。宿舍管理系统2.6,这个软件是为中小企业,学校的宿舍管理提供的一款免费软件,它可以管理房间信息,入住员工信息,提供各种查询功能,尤其是对房间信息管理,包括房间的水电表、电话、网络端口,这些功能对房间的维护提供了很大的方便,还提供了计费管理功能10。在一些发达国家类似的宿舍管理系统已经应用于后勤管理,而且已经相当普及11。近几年,管理信息系统发展较快,特
6、别是微型计算机的出现和普及为信息处理提了物美价廉的手段,对于推动我国管理信息处理的现代化起了重要的作用。然而在我们国家基本上还是停留在帐本化管理,尽管已经出现了一些不错的产品,但后勤人员在使用电脑情况不佳,因此在制作出好产品的同时,我们国家也要注重人才素质的培养同样不容忽视12。14 本课题的研究方法及设计思路本系统使用java语言编写,使用MyEclipse作为开发环境13。利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,C
7、SS,Javascript,SQL,Hibernate14。数据库连接对动态网站来说是最为重要的部分,也是该软件设计的难点。了使程序在具有安全性、完整性、健壮性的同时, 可以方便地移植,采用Hibernate连接数据库更合适一些。使开发人员可以用纯Java语言编写完整的数据库应用程序15。本课题研究的是基于J2EE的web版大学宿舍管理系统,在设计过程中,拟采用MVC模式下的Struts2框架进行功能实现。持久层选用Hibernate将实体Bean映射至数据库表。在表示层中以Web页面作为主要客户端。由于框架本身的优势,使得该系统易于维护,可扩展性强。容器采用Apache Tomcat,解决了
8、线程问题,使得可以在同一时间容纳多个用户16。web层主要是作为用户访问系统的界面,提供Web网页服务器,同时与后台服务器连接,将客户端的请求信息传递到业务层,同时将后台反馈的信息传送到客户端6。视图部分采用JSP,控制器部分交由Struts的action直接和实体bean交互以操作数据库。后台数据库采用的Oracle,它功能比较强大,除了可以处理包含在各种平台上运行的数据库管理系统内核之外,还包括了数据复制、数据库系统管理、Internet网关支持、在线分析处理、多媒体支持和各种并行处理能力。该系统的设计与实现应为学校管理部门提供一个全新的工作环境,为促进学校教育教学管理的科学化、规范化、信
9、息化提供了有力的支持,提升了学校教学管理信息化的水平,从而使该系统成为学校日常管理工作中离不开的关键应用,所以应该为日后软件的维护提供良好和完备的接口17。2 可行性分析21 经济可行性软件的经济可行性是指投入该软件使用后,软件所能带来的经济收益与开发设计所需要的投资比率,是否能够减少较之以往的费用,同时还要看此软件能否可以给用户带来好的的经济效益,我们开发的大学生宿舍管理系统不仅可以使管理人员提高工作效率,节省工作时间,方便操作与管理,更多的节省人力资源所带来的不必要的费用。本系统的开发在经济上是完全可行的。开发此软件不需要大量经费,而且是个人独立设计,可以节省许多费用,只需要一台电脑即可,
10、不需要太多的花费。22 技术可行性该系统的开发选取的开发工具:Java作为编程语言1.MyEclipse10.0.作为开发环境: Myeclipse企业级工作平台是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能。2.Oracle10g作为数据库开发工具: Oracle10g数据库关键目标降低管理开销,提高性能。Oracle10g的增强有对高可用性的增强、新的Flashback能力、支持回滚更新操作;对安全性的增强,便于管理大量的用户;BI
11、方面的增强 , 包括改进的SQL能力、分析功能、OLAP 、数据挖掘的能力等;对非关系型数据存储的能力得到了改进; 3.Apache Tomcat6.0作为服务器开发工具: Apache是普通服务器,本身只支持普通网页。Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为Web服务器的一些特有功能。由于Tomca本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。Apache Tomcat 包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。4.Microsoft Office Visio 2007作为
12、数据流程图和业务流程图绘制工具: Microsoft Office Visio 便于IT和商务专业人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的Microsoft Office Visio 图表,可以促进对系统和流程的了解,深入了解复杂信息并利用这些知识做出更好的业务决策。大多数图形软件程序依赖于艺术技能。在使用Visio时,以可视方式传递重要信息就像打开模板、将形状拖放到绘图中以及对即将完成的工作应用主题一样轻松。5.Microsoft Word 2003作为文档编写: 是一种处理程序,可使文档的创建、共享和阅读变得更加容易。改进后的审阅和标记功能为您提供多种
13、跟踪更改和管理批注的方式。Word 2003 还支持“可扩展标记语言”(XML)文件格式,并可作为功能完善的 XML编辑器。另外,您可以保存和打开 XML 文件以集成单位内的关键商业数据。根据该系统的基本要求衡量所需的技术是否具备,可从硬软件的性能要求、环境条件、操作人员软件应用水平等方面去考虑和分析。考虑到系统实施的可行性以及复杂性,在开发环境方面选择了如今较流行的MyEclipse工具来进行开发管理平台的设计,使用Oracle10g作为数据库来存储数据。在硬件方面,由于用的是笔记本电脑,硬件的配置越高,系统的开发与运行流畅。而且根据了解,如今的家用或商用电脑硬件的整体配置水平普遍比较高,所
14、以系统在硬件方面是可行的。在软件方面,由于MyEclipse和Oracle10g是两个非常成熟的开发工具,无论在安全性、可用性、可靠性方面都毫无置疑,并且在校期间都应用过,因此软件方面是可行的。23 运行可行性 大学生宿舍管理系统操作简单易行,所以使用前的培训也比较容易,只需要简单的一些电脑操作技术即可,而且运行环境简单,界面设计简洁易懂,经过以上分析,运行方面是可行的。3 总体设计31 系统需求分析3.1.1 数据需求:此系统主要完成学生入住登记及入住后的管理,因此,需要的数据信息包括:系统管理员,楼宇管理员信息包括用户名、密码、电话等信息。学生信息包括学生基本个人信息,住房信息,迁入迁出信
15、息;房屋信息包括价格和标准配置,水电费的设置和收缴情况等;维修信息包含维修者和损坏者及赔偿等信息;访问者信息,包括访问者身份及进入和离开登记等。3.1.2 功能需求:功能需求分析的任务是弄清用户对目标系统数据处理功能所提出的需求。本系统的功能需求有:(1) 允许管理员通过指定帐号和密码可以进入系统;(2) 管理员可以随时录入某个学生或房间的住宿情况;(3) 管理员可以随时查询某个学生或房间的住宿情况;(4) 管理员可以查询某个宿舍的水电费情况;(5) 管理员还可以录入每个学生的出入情况;(6) 学生可以通过姓名和学号进入系统;(7) 学生可以报修物品,查询水电费,发布留言。32 系统概要设计3
16、.2.1 功能模块设计:该系统总体分为三个大模块,即系统管理员模块,楼宇管理员和学生模块,系统赋予各模块的功能是有区别的。除此之外,还有登录模块。各模块的功能如下所述:登录模块:可以判断账号的合法性和角色,根据不同的角色跳转相应的页面。系统管理员模块:(1)楼宇管理员管理:该模块主要功能是添加新的楼宇管路员,对楼宇管理员的姓名、电话等信息的修改、删除,查询;(2)学生管理:该模块主要是查询学生的入住信息的添加,更新等。(3)宿舍管理:该模块主要是查询并且显示宿舍的大小,宿舍号,位置等;(4)楼宇管理:该模块主要是添加楼宇,修改楼宇相关信息; (5)修改密码:该模块主要是修改登录人员的密码修改;
17、(6)退出系统:该模块是退出系统。楼宇管理员模块:(1)本月水费统计:该模块主要是显示各个宿舍的当月用水情况以及是否交费;(2)本月电费统计:该模块主要是显示各个宿舍的当月用电情况以及是否交费;(3)学生入住登记:该模块主要是登记学生入住;(4)学生迁出登记:该模块主要是登记学生的迁出;(5)报修统计:该模块主要是查看各个宿舍的设施需要维修情况;(6)迁出记录:该模块主要是查看学生的迁出名单;(7)学生留言:该模块主要是查看学生的留言建议;(8)公告管理:该模块主要是发布公告提示学生;(9)修改密码:该模块主要是修改登录密码;(10)退出系统:该模块主要是退出当前系统。学生模块:(1)本月水费
18、查询:该模块主要是查询该生宿舍的水费;(2)本月电费查询:该模块主要是查询该生宿舍的电费;(3)在此留言:该模块主要是给楼宇管理员留言;(4)维修申请:该模块主要是维修申请通知管理员维修;(5)公告查询:该模块主要是查看管理员的公告(6)修改密码:该模块主要是修改密码;(7)退出系统:该模块主要是退出当前系统。33 功能模块图图3-1 系统功能模块图图3-2 学生功能模块图34 系统分层设计该系统采用MVC分层结构设计。主要包括视图层、控制层、模型层。系统中设计用到的包有bean包、action包和dao包。action包:主要是放置Struts2的Action java类,用来控制流程跳转、
19、操纵model层、从model里面取数据呈现给表示层。dao包:主要放置负责与数据库打交道的java类,所有类皆继承自一个HirbernateDao。该层封装了数据的增、删、改、查操作。bean包:主要是放置实体bean java类,用来表示实体,并且映射至数据库对应的表,负责向view层提供数据。4 详细设计41 数据库4.1.1 数据库设计一个好的软件,数据库设计的好坏决定了软件的开发维护、运行以及维护的容易程度。如果把企业的数据比作高楼大厦的砖瓦,那么数据库的设计就相当于打地基一样重要。整个软件系统的操作实际上就是对数据的操作,所以,数据库的设计直接决定这个系统的好坏。4.1.2 数据字
20、典本系统一共使用12张表,其中涉及到学生的有:学生表(student)、楼宇信息表(building)、宿舍表(dormitory)、迁出表(out1)、入住表(log)、水费表(waterfee)、电费表(electricfee)、留言信息表(message)、维修表(repair)、公告表(notice)。各表的表结构如下所示:楼宇信息表用于记录楼宇的基本信息。如表4-1所示。 序号字段名字段说明字段类型字段长度1Building_ID编号number42Building_Name楼宇名称varchar2503Building_Introduction楼宇说明varchar2200表4-1
21、楼宇信息表学生表用于记录学生的基本信息,如表4-2所示。序号字段名字段说明字段类型字段长度1Student_ID编号number42Student_DomitoryID宿舍编号number43Student_Username学生用户名varchar2204Student_Password学生密码varchar2505Student_Name姓名varchar2206Student_Sex性别varchar2107Student_Class班级varchar2208Student_State状态varchar220表4-2学生表宿舍表用于记录宿舍的基本信息,如表4-3所示。序号字段名字段说明字段
22、类型字段长度1Domitory_ID编号number42Domitory_BuildingID楼宇编号number43Domitory_Name宿舍名varchar2504Domitory_Type宿舍类型varchar2205Domitory_Number宿舍人数varchar2206Domitory_Tel联系方式varchar250表4-3宿舍表迁出表用于记录学生迁出的信息,如表4-4所示。序号字段名字段说明字段类型字段长度1Out_ID编号number42Out_StudentID学生编号number43Out_Date迁出日期varchar2204Out_Remark迁出说明varc
23、har2200表4-4迁出表入住表用于记录学生迁出的信息,如表4-5所示。序号字段名字段说明字段类型字段长度1Log_ID编号number42Log_StudentID学生编号number43Log_TeacherID楼宇管理员编号number44Log_Date入住日期varchar2205Log_Remark入住说明varchar2200表4-5入住表水费表用于记录相关水费信息,如表4-6所示。序号字段名字段说明字段类型字段长度1Waterfee_ID编号number42Waterfee_Domitory_Name宿舍名varchar2503Waterfee_Degree吨数varchar
24、2204Waterfee_Start上月读表数varchar2205Waterfee_End本月读表数varchar2206Waterfee_Money金额varchar2207Waterfee_Whether是否已交费varchar220表4-6水费表留言信息表用于记录留言的相关信息,如表4-7所示。序号字段名字段说明字段类型字段长度1Message_ID编号number42Message_Domitory_Name宿舍名varchar2503Message_Theme留言主题varchar2204Message_Content留言内容varchar2505Message_Student_N
25、ame学生姓名varchar250表4-7留言信息表维修表用于记录维修的相关信息,如表4-8所示。序号字段名字段说明字段类型字段长度1Repair_ID编号number42Repair_Domitory_Name宿舍名varchar2503Repair_Content维修内容varchar2504Repair_Date提交日期varchar220表4-8维修表公告表用于记录管理员发布公告的相关信息,如表4-9所示。序号字段名字段说明字段类型字段长度1Notice_ID编号number42Notice_Theme公告主题varchar2203Notice_Content公告内容varchar22
26、004Notice_Date发布日期varchar2205Teacher_Name楼宇管理员姓名varchar220表4-9公告表4.1.3 E-R图图4-1 E-R图42 EJB层的设计4.2.1 实体Bean的设计实体Bean是根据数据库之中的表来建立的其中的相关属性/成员变量对应数据库表中的各种字段。以本工程的一个实体为例,各种操作需要调用到Student实体Bean ,Student实体Bean的代码如下:package com.briup.sushe.bean;public class StudentBean private int Student_ID ; private int
27、Student_DomitoryID ; private String Student_Username ; private String Student_Password ; private String Student_Name ; private String Student_Sex ; private String Student_Class ; private String Student_State ;public int getStudent_ID() return Student_ID;public void setStudent_ID(int studentID) Stude
28、nt_ID = studentID;public int getStudent_DomitoryID() return Student_DomitoryID;public void setStudent_DomitoryID(int studentDomitoryID) Student_DomitoryID = studentDomitoryID;public String getStudent_Username() return Student_Username;public void setStudent_Username(String studentUsername) Student_U
29、sername = studentUsername;public String getStudent_Password() return Student_Password;public void setStudent_Password(String studentPassword) Student_Password = studentPassword;public String getStudent_Name() return Student_Name;public void setStudent_Name(String studentName) Student_Name = studentN
30、ame;public String getStudent_Sex() return Student_Sex;public void setStudent_Sex(String studentSex) Student_Sex = studentSex;public String getStudent_Class() return Student_Class;public void setStudent_Class(String studentClass) Student_Class = studentClasspublic String getStudent_State() return Stu
31、dent_State;public void setStudent_State(String studentState) Student_State = studentState;private String Domitory_Name ;private String Building_Name ;public String getDomitory_Name() return Domitory_Name;public void setDomitory_Name(String domitoryName) Domitory_Name = domitoryName;public String get
32、Building_Name() return Building_Name;public void setBuilding_Name(String buildingName) Building_Name = buildingName;private String Domitory_Type ; private String Domitory_Number ; private String Domitory_Tel ;public String getDomitory_Type() return Domitory_Type;public void setDomitory_Type(String d
33、omitoryType) Domitory_Type = domitoryType;public String getDomitory_Number() return Domitory_Number;public void setDomitory_Number(String domitoryNumber) Domitory_Number = domitoryNumber;public String getDomitory_Tel() return Domitory_Tel;public void setDomitory_Tel(String domitoryTel) Domitory_Tel
34、= domitoryTel;4.2.2 数据库映射与连接本系统使用的是Hibernate将对象持久化,让传统的关系型数据库与实体映射成为符合面向对象编程思想的数据处理方式。采用Hibernate,实体与数据库映射只需要配置相应的XML文件即可,跟代码完全分离。这里也需要JDBC驱动,本系统采用oracle-connector-java-5.1.5-bin.jar。dataSource为数据源,这里采用连接池,下面有对连接池的连接数等的配置。DriverClass指向JDBC驱动。jdbcUrl为数据库的URL,本系统采用Oracle, 本机地址为localhost,数据库名为likai,所以U
35、RL就应为jdbc:Oracle:/localhost/likai。User和password为数据库的连接用户名密码。这样就完成了数据库的连接。其他和Hibernate有关的,sessionFactory和transaction是用Spring的依赖注入功能,将Hibernate的事务交由Spring管理。需要注意的是,在sessionFactory需要注入Hibernate的数据源,数据库要选择方言,比如本系统,应为不同的数据库要选择不同的dialec。5 系统实现51 用户登录要先使用本系统,必须先登录,登录时通过选择学生身份可以以学生身份登录到系统中。界面设计如图5-1所示。图5-1登
36、录界面学生登录核心代码:public String execute() throws Exception else if(Type.equals(学生)if (null = new StudentDao().CheckLogin(Username, Password) Msg = 用户名或者密码错误;return INPUT;elseString Student_ID=new StudentDao().CheckLogin(Username, Password);HttpSession session = ServletActionContext.getRequest().getSession
37、();session.setAttribute(name, Username);session.setAttribute(id, Student_ID);session.setAttribute(type, 3);return SUCCESS;elseMsg = 身份类型错误;return INPUT;当用户输入用户名和密码后首先要进行身份验证,如果用户存在,则成功登录,反之,如果用户不存在,提示错误信息“输入的用户名或密码不存在”,返回登录界面重新输入用户名和密码。用户登录的程序流程图如图5-2所示。图5-2 登录流程图52 学生信息管理设计与实现5.2.1 实现目标该模块是对学生信息的管理
38、,以学生身份登录系统,可以查看该学生所在宿舍当月的水电费记录、留言、查看公告、修改密码等操作,界面的设计如图5-3所示。图5-3 学生使用界面图5-4 学生入住图5.2.2 实现过程学生使用界面核心代码如下: 本月水费查询 本月电费查询 在此留言 维修申请 公告查看 53 学生留言发表设计与实现5.3.1 实现目标该模块主要是实现学生对楼宇管理员的留言,界面的设计如图5-4所示。图5-4 学生留言界面5.3.2 实现过程学生留言的核心代码如下:MessageBean messbean=new MessageBean();messbean.setMessage_Theme(Message_The
39、me);messbean.setMessage_Content(Message_Content);messbean.setMessage_Student_Name(Message_Student_Name);messbean.setMessage_Domitory_Name(Message_Domitory_Name);new MessageDao().Add(messbean);54 学生公告查看设计与实现5.4.1 实现目标该模块主要实现学生对楼宇管理员发布的公告进行查看,界面的设计如图5-5所示。图5-5 公告查看界面5.4.2 实现过程公告查看的核心代码如下:HttpSession s
40、ession = ServletActionContext.getRequest().getSession();if(session.getAttribute(id)=null)out.print(alert(请重新登录!);window.location=Login.jsp;);out.flush();out.close();return null;String strWhere=1=1;list=new NoticeDao().GetList(strWhere,Notice_Theme);return SUCCESS;55 学生申请维修设计与实现5.5.1 实现目标该模块主要实现学生对损坏物品申请维修,通过发布维修申请,楼宇管理员看到该申请后将通知物业部门给予维修,界面的设计如图5-6所示。图5-6 维修申请界面5.5.2 实现过程维修申请的核心代码如下:public String execute() throws Exception HttpSession session = ServletActionContext.getRequest().getSession();if(session.getAttribute(i