本科毕业设计---教学管理系统之学生数据管理子系统---
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安科技大学高新学院
毕业设计(论文)任务书
系别:机电信息学院
专业:计算机科学与技术
学生姓名:Xxx 学号:xxxxxxxxx
设计(论文)题目:教学管理系统之学生数据管理子系统
起迄日期: 2013年10月8日~ 2014年 1月10日
设计(论文)地点:西安科技大学高新学院
指导教师:xx
专业教研室负责人:xxx
发任务书日期: 2013 年9 月 15 日
任务书填写要求
1.毕业设计(论文)任务书由指导教师根据各课题的具体情况指导学生填写。
此任务书应在毕业设计(论文)开始前一周内填好并发给学生;
2.任务书内容必须用黑墨水笔工整书写或按教务处统一设计的电子文档标准格式(可从教务处网页上下载)打印,不得随便涂改或潦草书写,禁止打印在其它纸上后剪贴;
3.任务书内填写的内容,必须和学生毕业设计(论文)完成的情况相一致,若有变更,应当经过所在专业主管领导审批后方可重新填写;
4.任务书内有关“系别”、“专业”等名称的填写,应写中文全称,不能写数字代码。
学生的“学号”要写全号,不能只写最后2位或1位数字;
5.任务书内“主要参考文献”的填写,应按照国标GB 7714—87《文后参考文献著录规则》的要求书写,不能有随意性;
6.有关年月日等日期的填写,应当按照国标GB/T 7408—94《数据元和交换格式、信息交换、日期和时间表示法》规定的要求,一律用阿拉伯数字书写。
如“2004年3月15日”或“2004-03-15”。
教务管理系统之学生管理子系统
摘要
教务管理系统是一个基于B/S模式的学校综合信息管理的一个平台,一种包含学校多种信息、多种技术的一个网络教务信息管理手段。
其中学生信息的管理是一个十分麻烦、棘手的任务,对应一所学校而言,更应该综合利用网络资源,提高学校学生的管理效率和力度,提高现在办学的现代化和网络化。
本系统结合了我们学校的实际情况,解决了学校学生管理中存在一些实际问题,设计并开发出了教务管理系统的部分模块,本子系统是教务管理系统中非常重要的组成部分,是基于java平台的jsp结合servlet,利用SQL Serser 2005数据库进行综合开发的。
这个系统主要有四种权限登陆,管理员的权限、二级院系的权限、教师的权限和学生的权限。
其中教务管理系统之学生管理模块的开发,解决了高校对学生的查询、导入和导出,可以满足高校教务管理工作的效果和质量。
其中学生信息的导入导出用的核心技术主要有Apache POI和Commons upload插件。
经过三个多月的努力,教务管理系统之学生管理子系统的功能基本实现,基本完成了学生信息的录入,导出,管理,实现学生信息的管理。
关键词:jsp;servlet;教务管理系统;学生管理系统
Student Academic Management System Management Subsystem
Abstract
Academic information management system is a fusion of management science, information science, system science and computer technology as an integrated advanced management tools. Student information management which is a very tedious and complicated a task for a school, should use some local resources to improve student management efforts。
The system combines the actual situation of our school, the students managed to solve the school, there are some practical problems in the design and development of an educational management system, part of the module, the system is based on Academic Information Management System B / S model, based on the JAVAEE JSP + Servlet + SQLSERVER2005 database development. The system consists of four modules administrator management module, two faculty management module, teacher and student management module management module. Including the development of educational management system management module for students to solve the queries of college students, import and export, efficient, paperless and network to meet the needs of the university educational management, improve the quality and efficiency of university dean . Where the core technology used in import and export student information mainly Apache POI and Commons upload plug-ins.
After three months of efforts, the function of the Student Academic Management System Management Subsystem basic implementation, the basic completion of the input student information, export, management, and management of student information.
Keywords:JSP;SERVLET;Educational information management system;student mannagement system
目录
1绪论 (1)
1.1课题的研究背景与意义 (1)
1.1.1国内外现状 (1)
1.1.2课题的研究意义和目的 (1)
1.2.系统的定义及内容简介 (1)
1.2.1系统的定义 (1)
1.2.2系统的内容简介 (2)
2系统中主要用到的技术 (3)
2.1HTML方面 (3)
2.1.1HTML (3)
2.1.2CSS (3)
2.1.3JavaScript (3)
2.2JAVAWEB方法 (3)
2.2.1Java (3)
2.2.2JSP (4)
2.2.3Servlet (4)
2.3扩展插件 (4)
2.3.1Juqery validate (4)
2.3.2AJAX (5)
2.3.3SWFUpload (5)
2.3.4POI (5)
2.3.5commons-fileupload (5)
2.4 数据库方面 (6)
2.3.1SQL Server2005数据库 (6)
2.3.2PowerDesiner. (6)
3教务管理系统的设计与实现 (7)
3.1开发和运行环境选择 (7)
3.2系统设计 (7)
3.2.1系统功能分析 (7)
3.2.2系统功能模块设计 (7)
3.2.3WEB系统架构设计 (8)
3.3学生管理子系统功能分析 (9)
3.4数据库设计 (9)
4教务系统公共模块设计 (14)
4.1院系设置 (14)
4.2考试类型 (14)
4.3教室类型 (14)
4.4教室管理 (15)
4.5用户管理 (15)
4.6专业设置 (15)
4.7修改个人信息 (16)
5模块详细设计(学生管理子模块) (17)
5.1学生基本信息条件查询 (17)
5.1.1学生基本信息界面设计 (17)
5.1.2学院和专业级联设计 (18)
5.1.3专业和班级级联查询服务器关键代码 (19)
5.2学生信息从Excel批量导入 (20)
5.2.1客户端swfUpload组件 (20)
5.2.2上传组件commons-upload (23)
5.2.3解析Excel工具poi (25)
5.3学生信息增加 (27)
5.4学生信息修改 (30)
5.5学生信息导出到Excel (31)
5.6学生功能模块设计之学生权限 (34)
5.6.1学生权限基本界面 (34)
5.6.2验证码的制作 (35)
6系统测试与维护 (37)
6.1系统的测试目标 (37)
6.2单位测试介绍 (37)
6.3系统测试 (37)
6.4系统维护 (39)
附录 (40)
参考文献 (60)
致谢 (61)
1绪论
1.1课题的研究背景与意义
1.1.1国内外现状
教学管理系统现在已经成为大中专院校普遍使用的教学管理手段之一。
就技术而言,实现教学管理系统的各种技术已经非常成熟。
由于系统开发工具的不断推新,虽然系统框架没有变、具体要求没变,但某些具体实现技术在变化,所以要对教务管理系统进行更新升级。
教务管理系统是在国外许多大学已经开展了好多年,其管理模式基本上是面向全局的综合教务管理系统。
由于多年运行不断使用和改进,国外的这种管理模式已处于比较完善的稳定运行阶段。
近年来,高等教育办学规模持续扩大,教育教学体制改革不断深化,这对教务管理工作提出了新的要求。
教务管理系统之学生子系统是在教务管理系统中非常重要的一个环节,它用到了广泛的技术,综合了多种技术和资源,是一个以现代网络技术为核心的计算机应用程序。
经过这么多年的技术改革和更新,各个高校都建立了一套自己的教务管理处理信息平台,能够很好的处理高校教务问题。
1.1.2课题的研究意义和目的
对于高校教务处而言,最主要的是管理学生的基本信息、学生的创建、学生课程选择、教师信息管理。
对于一个上万学生的高校而言,学生信息管理会非常繁琐,对其进行管理可能会出现各种莫名其妙的问题。
为了方便学校教务人员的工作,提高教务人员的工作效率,因此有必要也必须开发一套用于管理学校师生信息的管理系统,克服传统管理的弊端,使得学校管理走上信息化道路,克服各种弊端,提高教务管理效率。
教务管理系统之学生管理系统的开发可以较好的解决高校学生管理的难度,提高教务管理的效率和质量。
1.2.系统的定义及内容简介
1.2.1系统的定义
本子系统是方便学校教务人员管理学生信息开发的。
现今全国各学校的管理系统正逐步与网络信息技术接轨,对学校的学员信息能够更方便地进行管理,运用教务管理系统实
现管理模式的科学化、现代化,大大提高学校教务管理的运行效率和管理水平。
因此,在科技、信息和网络技术高速发展的带动下,教务管理系统趋向于集计算机网络技术、科学管理方法等于一体,方便处理教务工作。
由于学校教务管理的特殊性,决定了教务服务的综合性较其他服务更为突出和特殊,而学校教务对用于辅助管理的管理系统要求就相对更高。
对于学校教务而言,具有实用意义的管理系统,在硬件上应采用互联网、办公自动化等信息技术,在软件上应融入当代各学校最优秀的管理思想,从而更好地辅助教务人员的管理工作。
本课题就基于教务管理的理念和信息技术的结合这样一个出发点而提出的需要。
我国的各学校教师、学生人数众多,学校需要一个足够完善的教务管理系统来管理学生的基本新、选课和教师的授课安排等,所以本子系统提供了对学生的基本信息管理、批量学生信息导入、学生信息下载等功能,基本满足教务人员管理学生信息日常的教务工作。
1.2.2系统的内容简介
教务管理系统为教务管理人员管理日常教务工作提供了方便。
学生可以使用此系统查询自己已修完课程的成绩、查看自己的学籍信息、选课等;教师可以使用此系统给学生所选的课程打分、查看自己的信息及课程安排情况等;二级院系可以对本学院的课程进行管理;管理员可以使用此系统添加相关用户信息、备份数据等。
因此本系统主要实现学生功能、教师功能、二级院系功能、管理员功能。
学生功能:个人信息查询、修改;密码修改等。
教师功能:教师信息查询、修改;密码修改;教师课表;教学实施计划查询;
二级院系功能:教学计划安排;每学期课程安排;
管理员功能:教师信息修改、删除;管理员信息修改、删除(有权限之分);课程信息添加、修改、删除;学生学籍信息查询、修改、删除(有权限之分)等。
教务管理系统之学生管理系统完成的主要功能:1:学生权限下,登陆、学生基本信息查询和修改;2:管理员权限下的学生信息添加、查询与修改、学生批量信息导入和导出;
2系统中主要用到的技术
2.1HTML方面
2.1.1HTML
HTML(HyperText Markup Language)即超文本标记语言,也就是我们平时说的网页,一网页就是一个HTML文件,一般以.html或者.html为扩展名,可以用任何文本编辑器进行编辑。
2.1.2CSS
层叠样式表(Cascading Style Sheets),一种用来为修饰结构文档的HTML或者XML 的样式表,CSS的最大优点就是能够实现将文件的内容与显示分隔开来,展现同样的内容只需修改css就可以实现不同的页面展示效果。
2.1.3JavaScript
JavaScript,一种基于浏览器的脚本语言,最早是在HTML网页上使用,用来给HTML 网页增加动态功能。
现在多用于客户端的表单验证,随着HTML5的出现JS变的更加流行。
JavaScript的一个重要功能就是面向对象的功能,通过基于对象的程序设计,可以用更直观、模块化和可重复使用的方式进行程序开发。
是一种解释性脚本语言(代码不进行预编译)。
主要用来向HTML页面添加交互行为。
可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。
2.2JAVAWEB方法
2.2.1Java
JAVA不仅是一门编程语言,更是一个平台,拥有面向对象,跨平台,多线程,分布式等特点,具体可以分为JAVASE,JAVAEE,JAVAME。
其中,JAVASE是java的基础,也是java
的核心,JAVA SE:JAVA Platform,Standard Edition,前身J2SE,2005年之后更名为JAVA SE,主要包含面向对象思想,JVM,底层调用等待。
JAVA EE即java Platform ,Enterprise Edition 企业级开发应用技术,主要包括JSP,Servlet,Ejb等等;JAVA ME,JAVA Micro Edition嵌入式移动设备开发技术,主要做游戏开发,通讯设备。
Java语言的特定:简介有效、可移植性、面向对象、解释性、适合分布式计算、有良好的性能,健壮、防患于未然、用多线程处理能力、有较高的安全性能、是一门动态语言、是一种中型的结构。
java的最大特色跨平台,这个全靠底层的JVM(JAVA Virtual Machine)来实现的,JVM通过读取与平台无关的class文件实现跨平台。
2.2.2JSP
JSP是目前最常用的三种动态网页语言ASP(Active Server pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor)之一,由Sun Microsystems公司倡导和许多公司参与共同建立的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的Web网页的技术标准。
JSP,即java Server Page JSP被JSP的编译引擎编译转化成Java Servlet(一个java 类),然后有java虚拟机底层执行。
其实,SUN(现被Oracle公司收购)早期没有jsp,
只有Servlet,用Servlet的输出流动态拼接这html,因为效率太低,SUN公司就借鉴了Asp 开发了一套类似ASP的服务器脚本技术JSP。
使得JSP得到快速的发展。
2.2.3Servlet
Servlet是服务器端小程序,只要是jsp能干的事情,servlet都能干,但是一般情况下我们规定,servlet只干三件事情,即:判断、跳转和调用。
即以后这jsp只能找servlet,不能找jsp。
这样做可是实现程序的分层实现。
Jsp作为前台页面展示,里面可以写java 代码,但是一般不允许写,servlet只能用来接收jsp页面的请求,进行判断,调用业务逻辑方法。
这样就是网页很好的实现了分层结构,遵循MVC设计模式。
2.3扩展插件
2.3.1Juqery validate
Jquery是一个优秀的javascript框架。
它是轻量级的js库,拥有强大的选择器,出色的DOM操作,可靠的事件处理、完善的兼容性和链式操作等功能,这些优点使得很多的开发者学习和研究它。
Jquery是开源和免费的,开发者可以自己编写插件,jquery很小只有压缩版只有30kb左右。
Jquery在对Ajax,表单验证等方面也做的很好。
类似的jquery
的插件插件还有很多,如Prototype、Dojo、Ext Js、MooTools等等,但是Jquery以写得少,做得多(writer less,do more)的理念赢得了很多开发者的青睐。
jquery.validate.js是jquery旗下的一个验证框架,借助jquery的优势,我们可以迅速验证一些常见的输入,并且可以自己扩充自己的验证方法,并且对国际化也有很好的支持。
2.3.2AJAX
AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。
Ajax的核心是JavaScript对象XmlHttpRequest。
该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。
简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
Ajax是一门老技术,但是注入了新思想。
现在在互联网中大量的使用,如:google suggest,Google Map,视频网站的视频评论等。
2.3.3SWFUpload
SWFUpload是一个客户端文件上传工具,它通过整合Flash与JavaScript技术为WEB 开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。
他的主要特点可以归纳为:支持多文件同时上传,ajax实现的无刷新上传,可显示进度条,有良好的浏览器兼容性,支持文件格式的筛选。
支持一些常见的javascript封装库,同时支持多个版本的flash。
它还提供了一组简明的JavaScript事件,借助它开发者可以方便的在文件上传过程中更新页面内容来营造各种动态效果。
这个组件有非常好的性能,得到了广大程序设计者的青睐。
2.3.4POI
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供APIcrosoft Office格式档案读和写的功能。
Apache POI功能比较强大,可以提供对word,ppt和Excel文件格式的读写。
我的项目中用到了对Excel数据的读写功能,POI确是强大支持多个版本的Excle数据进行操作。
当然类似的工具也还有,比如JXl,这个插件是专门针对Excel进行开发的,也不错。
2.3.5commons-fileupload
WEB文件上传可能是网站建设中最常用的功能之一,常用的web上传组件有
commons-fileupload和Smartupload。
其中commons-fileupload是Apahce 软件基金会下面的一个开源项目,专注文件的上传于下载,支持一个或者多多文件上传,对中文支持
友好,社区活跃,更新迅速,支持大文件上传,可以限制上传文件的大小和格式,接口简单方便好用。
2.4 数据库方面
2.3.1SQL Server2005数据库
在windows上开发的用数据库当然少不了用Microsoft的东西,之前我们学过了SQL Server 2000,这是一个微软十几年前的产品,现在太陈旧了,如同window xp一样,确实经典,但有些陈旧了。
话说数据库产品很多,如Oracle数据库、mysql数据库也都不错,但是在易用性上面说,个人觉得还是 Microsoft SQL Server的产品更胜一筹。
于是我就选择SQL Server 2005。
2.3.2PowerDesiner·
听同学说有一种工具学了之后,就不用写SQL语句了,而且支持常见的数据库,只要设计好E-R图,就可以产生针对不同数据库厂商的不同版本自动生成sql语句,这就是Power Designer,它是Sybase公司的CASE工具集,可以方便的对数据库进行操作,包含常见的大多数的关系型数据库。
可以画流程图,概念模型,物理模型等等,于是果断选择了powerDesiner。
3教务管理系统的设计与实现
3.1开发和运行环境选择
教务管理系统主要用于学校内部资源管理(如学生信息管理、老师信息管理、教学计划查询等),充分利用现代高度信息化手段来接受学生信息的咨询和反馈,形成目前学校内部受欢迎的教务产品,同时也方便了教务管理人员的管理工作,也方便了学生对自己个人信息的实时了解。
1、开发工具的选择
开发环境:java平台
开发工具:myEclipse和intellig idea
web服务器:Tomcat
数据库:Microsoft SQLServer 2005
辅助工具:Dreamweaver
2、运行环境要求
操作系统:Windows xp 或 window 7
3.2系统设计
3.2.1系统功能分析
教务管理系统主要具有以下功能要求:
学生功能:个人信息查询、修改;密码修改等。
教师功能:教师信息查询、修改;密码修改;教师课表;教学实施计划查询;
二级院系功能:教学计划安排;每学期课程安排;
管理员功能:教师信息修改、删除;管理员信息修改、删除(有权限之分);课程信息添加、修改、删除;学生学籍信息查询、修改、删除(有权限之分)等。
3.2.2系统功能模块设计
根据系统功能要求分析,可以将系统分解成以下几个功能模块来设计,如图3-1所示:
图3-1 系统功能模块图
3.2.3WEB系统架构设计
图3-2 WEB系统MVC三层结构设计
3.3 学生管理子系统功能分析
1. 教务处登陆功能模块图
图3-3 教务处登陆功能模块图
2.学生登陆功能模块图
3-4 学生登陆功能模块图
3.4 数据库设计
本教务系统在设计之初,计划包含的模块比较多,下面就需要的数据库设计进行详细介绍。
根据数据库结构的设计,可知在数据库中需建立15张表。
本系统创建的数据库为eduManager ,该数据库由学生信息表(student )、教师信息表(teacher )、二级院表(dept )、用户表(User )、考试类型表(tb_examType )、教室类型表(tb_classRoomType )、专业班级基本表(ClassTa )、学期教学计划表(perTermSchedu )、教室基本表(classRoom )、课
程基本表(rankCourse)、开课学院基本表(tb_startCourseDept)、班级课程表(classRankCourse)、人才培养计划表(educationOutline)、专业基本表(major)、课程安排表(rankCourseTimePlace)组成,在设计中所用到的关系表及其结构分别如下所示。
1、学生信息表(student),如图3-5示。
图3-5 学生信息表
2、教师信息表(teacher),如图3-6示。
图3-6教师信息表
3、二级院系表(dept)如图3-7示。
图3-7 二级院系表
4、用户表(User)如图3-8示。
图3-8 用户表
5、考试类型表(tb_examType)如图3-9所示。
图3-9考试类型表
6、教室类型表(tb_classRoomType)如图3-10所示。
图3-10教室类型表
7、专业班级基本表(ClassTa)如图3-11所示。
图3-11专业班级基本表
8、学期教学计划表(perTermSchedu)如图3-12所示。
图3-12学期教学计划表
9、教室基本表(classRoom)如图3-13所示。
图3-13教室基本表
10、课程基本表(rankCourse)如图3-14所示。
图3-14课程基本表
11、开课学院基本表(tb_startCourseDept)如图3-15所示。
图3-15开课学院基本表
12、班级课程表(classRankCourse)如图3-16所示。
图3-16班级课程表
13、人才培养计划表(educationOutline)如图3-17所示。
图3-17人才培养计划表
14、专业基本表(major)如图3-18所示。
图3-18专业基本表
15、课程安排表(rankCourseTimePlace)如图3-19所示。
图3-19课程安排表
4教务系统公共模块设计4.1院系设置
基本模块-院系设置如图4-1所示。
图4-1 院系设置
4.2考试类型
基本模块-考试类型如图4-2所示。
图4-2 考试类型
4.3教室类型
基本模块-考试类型如图4-3所示。
图4-3 教室类型4.4教室管理
基本模块-考试类型如图4-4所示。
图4-4 教室管理4.5用户管理
基本模块-用户管理如图4-5所示。
图4-5 用户管理4.6专业设置
基本模块-专业设置如图4-6所示。
图4-6 专业设置4.7修改个人信息
基本模块-修改个人信息如图4-7所示。
图4-7 修改个人信息
5模块详细设计(学生管理子模块)
5.1学生基本信息条件查询
5.1.1学生基本信息界面设计
管理员权限-学生信息查询如图5-1所示:
图5-1 学生基本信息查询
多条件查询服务器端关键代码:
// 1.获取客户端提交的参数
String deptId = request.getParameter("deptId"); // 学院
String mId = request.getParameter("majorId"); // 专业
String cId = StrUtil.codeStr(request.getParameter("classId")); // 班级
String startYear = StrUtil.codeStr(request.getParameter("startYear")); // 入学年份
// 2.分页工具条参数
String cPage = request.getParameter("currentPage"); //当前显示的页数
String pSize = request.getParameter("pageSize"); // 每页显示的条数
// 3.pageBean参数设置
PageBean pb = new PageBean();
int totalRecord = studentBiz.findMaxRows(pSize, deptId, mId, cId, startYear);
List<StudentVO> list = studentBiz.findAll(StrUtil.parseInt(cPage, 1), StrUtil.parseInt(pSize, pb.pSize),
deptId, mId, cId, startYear);
pb.setMaxRows(totalRecord);
pb.setPageList(list);
pb.setpSize(StrUtil.parseInt(pSize, pb.pSize));
pb.setcPage(StrUtil.parseInt(cPage, 1));
request.setAttribute("pb", pb);
// 4.其他参数
request.setAttribute("deptId", deptId);
request.setAttribute("majorId", mId);
request.setAttribute("classId", cId);
request.setAttribute("startYear", startYear);
request.getRequestDispatcher("/page/classes/stuList.jsp").forward(request, response);
5.1.2学院和专业级联设计
学院和专业级联,如图5-2所示:
图5-2 学院和专业级联示意图
1.学院和专业班级级联查询客户端关键代码
var $mId ;
var $cId;
$(function(){
$mId = $("select[name=mId]"); //专业
$cId = $("select[name=classId]"); // 班级
// 1. 页面加载成功之后
ajaxRequest();
// 2. 当专业被改变的时候
$mId.change(function(e){
ajaxRequest();
});
});
function ajaxRequest(){
var ajaxurl = "page/classes/Student";
var ajaxdata = {"m":"7","majorId":$mId.val()};
$.ajax({
url:ajaxurl, //请求的url
type:"post",// 请求的方式,post,get,put
data:ajaxdata,//请求的数据,get,这里是null
dataType:"xml",//设置回传数据的格式,不设置,会只能判断,并解析
success:function(xmlObj, state){// 设置成功接收数据的会回调函数
$cId.empty();//清空班级
$cId.append($("<option value='0'></option>"));
$(xmlObj).find("class").each(function(){ //遍历每一个叫class的节点
var classTa = $(this);
var cId = classTa.text();
$cId.append($("<option value='"+ cId +"'>"+ cId +"</option>"))
});
}
});
}
5.1.3专业和班级级联查询服务器关键代码
专业和班级级联,如图5-3所示:
图5-3 专业和班级级联示意图
专业和班级级联查询服务器关键代码
protected void changeClassByMajor(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{ String mId = request.getParameter("majorId"); //接收ajax post提交的传递的参
List<String> cIdList = classTaBiz.findByMid(mId);
Document document = new Document(); // 生成根节点
Element root = new Element("classes");
document.setRootElement(root); // 设置根元素
Iterator<String> it = cIdList.iterator();
while(it.hasNext()){
String cId = it.next();
// 拼装xml
Element classeTa = new Element("class");
classeTa.setText(cId);
root.addContent(classeTa);
}
response.setContentType("text/xml"); //注意回传数据的格式
OutputStream out = response.getOutputStream();
JdomXMLUtil.sendDom(document, out);
//JdomXMLUtil.sendDom(document, System.out);
}
5.2学生信息从Excel批量导入
5.2.1客户端swfUpload组件
上传组件swfuplaod,如图5-4所示:
图5-4 上传组件swfUpload
Swfupload上传指定后缀示意图,如图5-4所示:
图5-5 上传组件swfUpload指定上传文件后缀Swfupload多文件上传队列示意图,如图5-6所示:
图5-6 上传组件swfUpload上传文件管理上传插件SWFUpload客户端关键代码:
<script type="text/javascript">
var swfu;
window.onload = function () {
swfu = new SWFUpload({
upload_url: "<%=uploadUrl.toString()%>",
post_params: {"name" : "huliang","m":"10"},
// File Upload Settings
file_size_limit : "100 MB", // 100MB
//file_types : "*.*",
file_types : "*.xls;*.xlsx",
file_types_description : "所有文件",
file_upload_limit : "20",//上传文件个数限制
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,//选择好文件后提交
file_queued_handler: fileQueued,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
// Button Settings
button_image_url :
"<%=basePath%>images/SmallSpyGlassWithTransperancy_17x18.png",
button_placeholder_id : "spanButtonPlaceholder",
button_width: 350,
button_height: 18,
button_text : '<span class="button">选择文件 <span
class="buttonSmall">(单个文件最大100MB)</span></span>',
button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 12pt; }',
button_text_top_padding: 0,
button_text_left_padding: 18,
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
button_cursor: SWFUpload.CURSOR.HAND,
// Flash Settings
flash_url : "js/swfupload/swfupload.swf"
custom_settings : {
upload_target : "divFileProgressContainer"
}
debug: false //是否显示调试窗口
});
};
function startUploadFile(){
swfu.startUpload();
}
</script>
5.2.2上传组件commons-upload
Apache commons-upload上传文件核心代码:
protected void studentUPdate(HttpServletRequest request, HttpServletResponse resp)
throws ServletException, IOException{
StudentVO vo = new StudentVO();
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*4); // 设置缓冲区大小,这里是4kb
factory.setRepository(tempPathFile); // 设置缓冲区目录
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024*1024*4); // 设置最大文件尺寸,这里是4MB
List<FileItem> items = upload.parseRequest(request);// 得到所有文件
Iterator<FileItem> i = items.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (fi.isFormField()){ // 判断是否是字段值 {
String inputName = fi.getFieldName(); // 对应表单的 name
String inputValue = fi.getString("utf-8"); // 对应表单的value
if (inputName.equals("sId")) {// 学号
vo.setsId(inputValue);
} else if(inputName.equals("sName")){// 姓名
vo.setsName(inputValue);
}
//-------------------------------------------------
}else {// file上传域
String fileName = fi.getName(); //获取上传文件的完整名称如:f:\bb.bmp
if (fileName != null && !fileName.trim().isEmpty()) {
String virtualPath = StrUtil.addUploadPrefix(fileName); // 存入数据库的虚拟文件名称
vo.setPhoto(virtualPath);
File fullFile = new File(virtualPath);// 增加时间戳的前缀
File savedFile = new File(uploadPath, fullFile.getName());
fi.write(savedFile);
}
}
}
//========================================上传完成
return;
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
5.2.3解析Excel工具poi
Poi解析Excel实现批量上传效果如图:
图5-7 上传组件学生信息批量导入结果图
Apache POI解析Excle核心代码:
/**
* Excel读取工具
* @author 段大志
* 时间:2013-12-1下午6:35:20
*/
public class ExcelReaderUtil {
Workbook wb = null;
List<String[]> dataList = new ArrayList<String[]>(100);
/**
* 取Excel所有数据,包含header
*/
public List<String[]> getAllData(int sheetIndex) { int columnNum = 0;
Sheet sheet = wb.getSheetAt(sheetIndex);
if (sheet.getRow(0) != null) {
columnNum = sheet.getRow(0).getLastCellNum()
- sheet.getRow(0).getFirstCellNum();
//System.out.println("该表共有列数:" + columnNum);
}
if (columnNum > 0) {
for (Row row : sheet) { // 迭代每一行的数据
String[] singleRow = new String[columnNum];
int n = 0;
for (int i = 0; i < columnNum; i++) {
Cell cell = row.getCell(i, Row.CREATE_NULL_AS_BLANK);
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BLANK:
singleRow[n] = ""; // 空白单单元格
break;
case Cell.CELL_TYPE_BOOLEAN:
singleRow[n] = Boolean.toString(cell
.getBooleanCellValue());
break;
// 数值
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
singleRow[n] = String.valueOf(cell
.getDateCellValue());
} else {
cell.setCellType(Cell.CELL_TYPE_STRING);
String temp = cell.getStringCellValue();
// 判断是否包含小数点,如果不含小数点,则以字符串读取,如果含小数点,则转换为Double类型的字符串
if (temp.indexOf(".") > -1) {
singleRow[n] = String.valueOf(new Double(temp))
.trim();
} else {
singleRow[n] = temp.trim();
}
}
break;
case Cell.CELL_TYPE_STRING:
singleRow[n] = cell.getStringCellValue().trim();
break;
case Cell.CELL_TYPE_ERROR:
singleRow[n] = "";
break;。