1、学生宿舍管理系统专业名称:班 级:学生姓名:指导老师:完成时间目录1 绪论111 开发背景与现状112开发设计的意义12 开发环境介绍321 开发工具MyEclipse322 数据库 MySQL32.2.1 MySQL概述32.2.2 MySQL的特性32.2.3 MySQL的应用43 系统需求分析53.1 功能需求53.1.1 基本功能需求53.1.2 总体功能模块63.2 性能需求73.2.1系统安全性73.2.2 数据库选择73.2.3系统稳定性74 系统设计84.1数据库设计84.1.1 数据库概念结构设计84.1.2 数据库逻辑结构设计114.2 模块设计134.2.1 用户管理模块
2、134.2.2 宿舍管理模块144.2.3 信息维护模块154.2.4 外来人员管理模块164.2.5学生注册模块195 系统的编码与实现205.1 系统的实现平台205.1.1 系统环境205.1.2 后台数据库选择及配置205.2 系统功能模块实现205.2.1 学生注册模块225.2.2 宿舍卫生管理325.3 数据库操作的实现355.4 系统测试385.4.1 系统测试的目的385.4.2 系统的测试环境38总 结40致 谢41参 考 文 献42学生宿舍管理系统毕业设计论文1 绪论11 开发背景与现状随着时代的发展,计算机技术越来越深入各行各业,为广大的用户提供了更为周到和便捷的服务。
3、目前各行各业广泛使用专用系统,其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、娱乐、体育等各个领域,其用户群十分庞大,因此,设计开发好一个专用系统对一个机构(或部门)的发展十分重要。近年来,随着用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术的广泛应用,向用户提供的服务将越来越丰富,越来越人性化。 对于学校而言,学生宿舍管理是必不可少的组成部分。目前仍然存在有学校停留在宿舍管理部门人员手工记录数据的阶段,手工记录对于规模小的学校来说勉强可以接受;但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的,而且当查找某条记录时,由于数据量庞大,只能依靠
4、人工去一条一条地查找,这样不但麻烦而且浪费许多时间,工作效率比较低。采用计算机来管理宿舍和学生的信息,大大提高了查询的速度,节约了人力和物力资源,达到了预期的要求。今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面: 首先,计算机可以代替人工进行许多繁杂的劳动; 其次,计算机可以节省许多资源; 第三,计算机可以大大的提高人们的工作效率; 第四,计算机可以使敏感文档更加安全,等等.12 开发设计的意义随着高校办学规模的扩大,在校学生的学历层次、思想状态、文化水平呈多样化、复杂化趋势,这在很大程度上给学生管理工作带来许多新的问
5、题。随着学生人数的增多,高校学生宿舍管理的信息量日益庞大,账本化的工作模式获取信息慢,查阅困难,准确性差,很难适应高水平。因此,如何为学生提供一个安全、整洁、舒适的生活和学习环境,如何应用现代技术更科学、高效地对学生宿舍进行管理是各宿舍管理工作者的目标。 在传统模式下利用人工进行学生宿舍管理,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,令学校管理者对学生的信息管理带来了很大困难,严重影响了教育工作者的工作效率,针对这些情况,我们可使用日趋成熟的计算机技术来代替传统的人工模式, 来实现学生信息的现代化管理,这一技术具有手工管理
6、所无法比拟的优点,如:检索迅速,查找方便,可靠性高,存储量大,保密性好,寿命长, 成本底等。 这些优点能够极大地提高学生信息管理的效率,使我们的学校在市场经济的发展过程 中具有一定的竞争优势,也是学校实现科学化,正规化,现代化的重要条件。实现了科学、统一管理,避免了人工操作产生的错误,大大提高了工作效率。为了实现提高高校宿舍管理部门的工作效率;充分利用资源;减少不必要的人力,物力和财力的支出;方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的;为宿舍管理部门,开发设计专用系统-学生宿舍信息管理系统来进行管理学生宿舍信息,使学生宿舍信息实现标准化的管理和规范化的制度是十分要的。2 开发环境介
7、绍21 开发工具MyEclipseMyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse) 是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,支持完整的HTML,Struts,JSP, CSS,Javascript,Spring,SQL,Hibernate。 MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功
8、能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具22 数据库 MySQL2.2.1 MySQL概述 MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网
9、站总体拥有成本而选择了MySQL作为网站数据库。2.2.2 MySQL的特性1.使用C和C+编写,并使用了多种编译器进行测试,保证源代码的可移植性 。2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统 。3.为多种编程语言提供了API。这些编程语言包括C、C+、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。 4.支持多线程,充分利用CPU资源 。5.优化的SQL查询算法,有效地提高查询速度 。6.既能够作为一个单独的应用程序应用在客户端
10、服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。7.提供TCP/IP、ODBC和JDBC等多种数据库连接途径 。8.提供用于管理、检查、优化数据库操作的管理工具 。9.可以处理拥有上千万条记录的大型数据库。2.2.3 MySQL的应用与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL不支持视图(已经被列入5.1版的开发计划)、事件等)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中
11、小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。3 系统需求分析学生宿舍管理是当代学校中不可或缺的组成部分,在信息化飞速发展的今天,它的出现已经成了一种必然,本文将从宿舍管理系统的历史和现状进行分析,以求证本系统的设计具有实际的意义,并得到它在未来的发展,从而跟上时代的脚步,做出一个高质量的、安全性好的宿舍管理系统,使其不仅能满足学校现在的需要,也能满足将来一段时间的需要。学生宿舍管理系统的开发主要包括前台用户界面的开发和后台数据库的开发,对于后台数据库的建立和维护要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于前端应
12、用程序的开发则要求应用程序能提供强大的数据操纵功能,界面友好、使用简单方便等特点。本系统采用java作为前台用户界面的开发语言,java语言开源而且稳定,后台的数据库采用MySql。3.1 功能需求3.1.1 基本功能需求主要实现的是学生宿舍管理系统,在设计该系统时,应尽可能的贴近用户,便于用户操作。系统在实现上应该具有如下功能:1. 系统要求宿管人员输入正确的账号和密码才能进入系统。2. 系统提供学生注册,并上传照片。3. 系统应该提供学生的入住信息及学生注册后的学生个人详细信息4. 系统应提供宿管员的信息查询功能。5. 系统应提供信息维护功能,对学生信息添加,修改,删除。6. 新生可以自己
13、根据学号在入学前查找自己所在的宿舍床位。7. 系统提供宿舍外来人员登记的功能。8. 系统提供记录学生宿舍卫生管理的功能,9. 系统提供宿舍设备管理功能。3.1.2 总体功能模块宿舍管理系统主要实现的功能有:宿管员登录、学生注册、治安管理、信息查询、信息维护、宿舍设备管理、外来人员进出登记管理等。宿舍管理统宿 舍管 理 宿 舍设 备管理外来人员管 理管 理人 员登 录 卫 生管 理添加新生查 询宿 舍信 息查看学生查 询宿 舍设 备修改设备按日期查询按姓名查询信息统计登录和 退出录 入 宿 舍 分 数评 选优 秀宿 舍统 计 优 秀 宿舍修 改学 生信 息对设备备注图3.1 总体功能模块图3.2
14、 性能需求3.2.1系统安全性对于系统为方便学校管理学生宿舍而开发,便于统一管理,对学生信息表进行保护,没有登录的人员不能直接访问学生信息表,用于保护学生的信息。3.2.2 数据库选择 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,我选用了MySql 作为数据库开发。3.2.3系统稳定性本系统采用MVC模式(Model View Controlle),使应用程序,处理和输出分开,他们各自处理自己的业务,不应一个部分的逻辑业务变动,而
15、导致整体代码的重写。本系统的代码就是最典型的JSP + servlet + javabean的模式。4 系统设计4.1 数据库设计数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。 数据库设计是建立数据库及应用系统的技术,是信息系统开发和建议中的核心技术。由于数据库应用系统的复杂性,为了支持相关程序运行,数据库设计就变得异常复杂,因此最佳设计不可能一蹴而就,而只能是一种“反复探寻,逐步求精”的过程,也就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。4.1.1 数据库概念结构设计从需求分析可以看出,
16、本系统存在以下几个实体:学生实体:用于显示学生的属性,包括学生学号、姓名、班级、性别、户籍所在地、所在宿舍号、联系方式。宿管员实体:用于显示宿管员的用户名和密码。学生上传照片的实体:照片的id、照片的名字、照片对应学生的学号。导员实体:用于显示导员的姓名、所带班级和联系方式。外来人员:用于显示外来人员的姓名、身份证号、目的、来的时刻、走的时刻。E-R模型设计:根据实体设计,可以得到各个实体E-R图和部分子系统E-R图。(1)学生实体E-R图如图4.1所示。学生联系电话班级籍贯性别姓名宿舍号学生ID图4.1 学生实体E-R图(2)宿管员实体E-R图如图4.2所示。宿管员密码用户名图4.2 宿管员
17、实体E-R图(3)照片实体E-R图如图4.3所示。照片名字学生id照片ID图4.3 学生实体E-R图(4)导员实体E-R图如图4.4所示。导员姓名所带班级电话图4.4 导员实体E-R图(5)外来人员实体E-R图外来人员离开时间来时间姓名身份证号目的。图4.5 外来人员实体E-R图汇总后总体E-R模型图:导员Id班级电话姓名管理学生学号姓名性别宿舍号电话户籍辅导宿管员用户名密码管理宿舍宿舍号人数住宿管理设备名称数量使用外来人员姓名身份证号目的来时走时登记图4.6 总体E-R图4.1.2 数据库逻辑结构设计1. 学生信息表存储了学生的基本信息。表4.1 学生信息表字段名数据类型数据长度是否为空条件
18、KeyIDInt32NP_K姓名Char20Y姓名Char20Y班级Char2Y性别Char4Y户籍Char100Y联系方式Char11Y2.宿管员信息表存储了宿管员的基本信息。表4.2 宿管员信息表字段名数据类型数据长度是否为空条件KeyIDint32NP_K用户名Char50YUni密码Char30Y3. 宿舍信息表存储了学生上传照片的基本信息。表4.3 学生上传照片表字段名数据类型数据长度是否为空条件KeyIDint32NP_K名字Char50Y对应学生的学号Char32Y4. 班主任表存储了班主任的基本信息。表4.4 班主任表字段名数据类型数据长度是否为空条件Key班主任IDInt32
19、NP_K姓名Char20Y手机号Char11Y所带班级Char50Y4. 外来人员登记表存储了外来人员的基本信息。表 4.5 外来人员登记表字段名数据类型数据长度是否为空条件KeyIDInt32NP_K姓名Varchar50Y省份证号varChar11Y目的varChar500Y日期DateY进入时间DateY离开时间DateY4.2 模块设计宿舍管理系统作为学校内部信息平台的一部分,系统的用户信息来源于内部信息平台。用户在内部信息平台单点登录,即可直接访问宿舍管理系统。系统数据库与内部信息平台的后台数据库保持同步,当内部信息平台的用户信息修改后,即可同步信息到本系统数据库。用户在内部信息平台
20、成功登录后,当访问宿舍管理系统系统时,内部信息平台将用户名等信息传给宿舍管理系统,宿舍管理系统的接口模块将传过来的用户信息进行解析和初始化,得到系统的用户认证,从而是实现系统和内部信息平台的登录。4.2.1 用户管理模块该模块主要是为宿管员登录设计的,在宿管员登录后进入后台管理页面,注销用户可以重新登录。用户管理流程图如图4.7所示:宿管员登陆后台登录管理登录操作退出系统Error图 4.7 用户管理流程图4.2.2 宿舍管理模块该模块主要实现房间管理,包括添加,修改,删除。模块图如图4.8所示:添加宿舍显示添加宿舍输入修改信息信息提交增加成功图 4.8 学生信息修改流程4.2.3 信息维护模
21、块该模块实现的功能是修改学生的信息。首先查询到要修改信息的学生,然后修改学生的联系方式,所在班级等。流程图如图4.8所示:信息维护学生信息修改输入学生信息确认修改信息数据处理查询结束取消失败成功图 4.9 信息维护流程4.2.4 外来人员管理模块该模块的功能是实现外来人员的登记和查询,将外来人员的信息保存到数据中。(1)外来人员登记流程姓名身份证号目的日期离开时间来的时间外来人员登记管理登记外来人员 提交成功图 4.10 外来人员登记流程(2)查询外来人员信息按日期查询按姓名查询查询外来人员姓名日期来的时间身份证号离开时间目的返回查询信息图 4.11 查询外来人员流程4.2.5 学生注册模块该
22、模块实现学生注册功能。学生注册学生信息修改输入学生信息确认上传照片数据处理查询数据库结束取消失败成功图 4.12 学生注册流程5 系统的编码与实现5.1 系统的实现平台5.1.1 系统环境1、系统软件环境(1)服务端 操作系统:Microsoft Windows7数据库系统:MySQL5.5服务器:Tomcat5.0(2)客户端操作系统:适用于各种平台开发工具:MyEclipse,开发语言:Java(3)开发模式MVC模式,数据层、控制层、界面分开,其中一个模块逻辑业务的变动不影响到其他层,通过控制层(ActionServlet),将页面的信息保存到数据库,也可从数据库查询到的结果反馈到页面,
23、从而使系统稳定、高效的运行。2、系统硬件环境(1)服务端:CPU:酷睿四核,内存4G,硬盘500G;(2)客户端:Pentium 1.6GHz以上CPU,512MB以上内存;(3)网络配置:百兆模式或以上。5.1.2 后台数据库选择及配置本系统决定用MySQL数据库,原因有几下几点:(1)MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总
24、体拥有成本而选择了MySQL作为网站数据库。(2)从自身特性来说:1.使用C和C+编写,并使用了多种编译器进行测试,保证源代码的可移植性。 2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统 。3.为多种编程语言提供了API。这些编程语言包括C、C+、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 4.支持多线程,充分利用CPU资源。 5.优化的SQL查询算法,有效地提高查询速度。 6.既能够作为一个单独的应用程序应用在客户端服务器网络
25、环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。 7.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。 8.提供用于管理、检查、优化数据库操作的管理工具。 9.可以处理拥有上千万条记录的大型数据库。5.2 系统功能模块实现图5.1 宿舍管理系统主界面5.2.1 学生注册模块一、学生注册图5.2 学生注册界面代码部分学生注册界面:regist.jsp1、 用到的工厂Factory2、 接口StudentDAO获得方法:StudentDAO dao = (StudentDAO)
26、Factory .getInstance(StudentDAO);3、 数据库层的方法/通过id查找学生是否注册过public Student findById(int id)Connection conn=null;Student s=null;/Employee e=new Employee();try conn=DBUtil.getConnection();PreparedStatement prep=conn.prepareStatement(select * from t_student where id=?);prep.setInt(1,id);ResultSet rst=prep
27、.executeQuery();if(rst.next()s=new Student();s.setAge(rst.getString(age);s.setId(rst.getInt(id);s.setName(rst.getString(name); s.setSalary(rst.getString(salary); s.setSex(rst.getString(sex); s.setPwd(rst.getString(pwd); s.setPhone(rst.getString(phone); catch (Exception e1) / TODO Auto-generated catc
28、h blocke1.printStackTrace();finallyDBUtil.close(conn);return s;/将没有注册过的学生信息保存到数据库public void save(Student s)throws ExceptionConnection conn=null;tryconn=DBUtil.getConnection();PreparedStatement prep=conn.prepareStatement(insert into t_student(id,name,salary,sex,age,pwd,phone) values(?,?,?,?,?,?,?);p
29、rep.setInt(1, s.getId();prep.setString(2, s.getName();prep.setString(3, s.getSalary();prep.setString(4,s.getSex();prep.setString(5, s.getAge();prep.setString(6, s.getPwd();prep.setString(7,s.getPhone();prep.executeUpdate();catch(Exception e1)e1.printStackTrace();finallyDBUtil.close(conn);4、 控制层Actio
30、nServletAction.equals(“/regist”)int id=Integer.parseInt(request.getParameter(id);StudentDAO dao = (StudentDAO)Factory .getInstance(StudentDAO);try Student s=dao.findById(id);if(s!=null)/学号已被注册request.setAttribute(id_error, 学号已注册,不能再注册);request.getRequestDispatcher(regist.jsp).forward(request, respon
31、se);else /将没有注册过的学生信息添加到数据库s=new Student();s.setId(id);s.setName(request.getParameter(name);s.setSalary(request.getParameter(salary);s.setSex(request.getParameter(sex);s.setAge(request.getParameter(age);s.setPwd(request.getParameter(pwd);s.setPhone(request.getParameter(phone);dao.save(s);/为用户新建一个用来保
32、存文件的文件加String path = getServletContext().getRealPath(upload);File file = new File(path + / + pic_ + id);if(!file.exists()file.mkdirs();HttpSession session = request.getSession();session.setAttribute(s, s);request.setAttribute(s,s);request.getRequestDispatcher(regsuccess.jsp).forward(request, respons
33、e);/response.sendRedirect(regsuccess.jsp); catch (Exception e) e.printStackTrace();throw new ServletException(e);5.2.2 宿管员登录图5.3 宿管员登录界面代码部分宿管员登录:”/login”用到的接口1.userDAO2.方法/通过宿管员的名字查找是否有该宿管员,才能进行身份验证并登录,返回的是一个User对象。public User findByUsername(String name) throws ExceptionUser user=new User();Connect
34、ion conn=null;try conn=DBUtil.getConnection();PreparedStatement prep=conn.prepareStatement(select * from t_user where name=?);prep.setString(1, name);ResultSet rst=prep.executeQuery();if(rst.next() user=new User();user.setId(rst.getInt(id);user.setPwd(rst.getString(pwd);user.setName(rst.getString(na
35、me);else return null; catch (Exception e) e.printStackTrace();finallyconn.close();return user;3.控制层的方法if(action.equals(/login)String name=request.getParameter(name);/获得页面的宿管员的用户名String pwd=request.getParameter(pwd);/获得页面的密码UserDAO dao = (UserDAO)Factory .getInstance(UserDAO); try User user=dao.findB
36、yUsername(name);/调用数据库的方法/检查用户名和密码是否正确if(user!=null& user.getPwd().equals(pwd) HttpSession session=request.getSession(); session.setAttribute(user, user);EmployeeDAO dao1= (EmployeeDAO) Factory.getInstance(EmployeeDAO) ; response.sendRedirect(second.jsp); else request.setAttribute(login_error, 用户名或密
37、码错误(*_*),请检查你的用户名和密码); request.getRequestDispatcher(login.jsp).forward(request, response); catch (Exception e) e.printStackTrace();throw new ServletException(e);5.2.3 对学生的操作图5.4 操作界面代码部分宿舍界面:”/list”用到的接口StudentDAO 方法 public List findAll()throws Exception;/将所有学生的信息都查出来public Employee findById(int id)
38、throws Exception;/通过学号查找学生的信息public void save(Employee e) throws Exception;/保存学生信息public void delete(int id)throws Exception;/通过学号删除学生信息public void modify(Employee e)throws Exception;/修改学生信息public int totalPages(int rowsPerPage) throws Exception;/计算总页数public List findAll2(int page,int rowsPerPage) t
39、hrows Exception; /分页控制层if(action.equals(/list)/进行session验证,看是否已登录过HttpSession session=request.getSession();Object obj=session.getAttribute(user);if(obj=null)/如果没有登录,则跳到登录页面response.sendRedirect(login.jsp);return;elseString pageStr = request.getParameter(page);if(pageStr = null)pageStr = 1;int page =
40、 Integer.parseInt(pageStr);request.setAttribute(page, page);EmployeeDAO dao=(EmployeeDAO) Factory.getInstance(EmployeeDAO);List employees;try employees = dao.findAll2(page,10);/获得总页数int totalPages = dao.totalPages(10);request.setAttribute(totalPages, totalPages);request.setAttribute(employees,employees);RequestDispatcher rd=request.getRequestDispatcher(emplist.jsp);rd.forward(request, response); catch (Exception e) e.printStackTrace();throw new ServletException(e); else if(action.equals(/add)/从页面去增加的学生的信息int id=Integer.parseInt(request.getParamete