大学生论文管理系统doc

  第5章 大学生论文管理系统 大学教育已经普及,大学生的数量也不断扩大,随之而来的是学生论文数量的不断增多。如果按照手工作业来进行论文库的管理工作,不仅工作量大,而且容易出错,更不方便大家查阅。因此,需要为大学生开发一套论文管理系统。 大学生论文管理系统是学校等机构在自己的局域网上搭建的B/S结构办公平台,打开浏览器即可方便快捷地使用系统,进行。本章一个完整的从设计到实现的方法。采用MVC三层架构(JSP-JavaBean-Servlet)开发模式通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。 学院维护、系所维护、人员维护和角色权限维护和和和是在问题及其最终解决方案之间架设桥梁的第一步。者只有理解了之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工实现对添加新学院、修改、删除等功能。实现对添加新、修改、删除等功能。实现添加新人、查看、修改、删除和查询人员信息等功能。实现新增、修改和删除角色等功能。大学生管理系统首先是系统维护所用到的数据,如学院、系所、人员以及进行权限控制的权限,接下来是根据各个模块的需要对进行设计。本系统在设计过程中,尽量考虑到各个模块中相似之处,减少表格数量,提高表格的关联程度以及减少数据库中数据的冗余。系统设置内容包括学院维护、系所维护、人员维护和角色权限维护。 以上这些部分的内容和设置项,各个部分之间的关系比较明显,即人员属于系所、系所属于学院的所属关系,如图5-所示,所以在设计数据表的时候增加外键进行关联即可。 因为3个模块主要涉及的功能是信息的发布,。 图5- 学院-系所-人员关系 图5-4 大学生论文管理系统用例图 该用例图标记了所有的用例,从中可以得知,大学生论文管理系统的角色可以划分为两类。 管理员:管理论文、管理系所、管理学生用户、管理角色权限等。 学生用户:进行论文管理、科技专著管理、学术报告等。 5.3.2 系统域类分析 UML建模的第二步就是域类分析。实际开发大学生论文管理系统时,域类分析是建立在用例分析基础上的。要了解系统要处理的概念,这时最好将公司的有关人员组织起来开一个讨论会,了解概念和概念之间的关系。 大学生论文管理系统中的域类主要包括:数据库连接(DataBase)、字符串处理(DealString)、参数配置(ConfigReader)等。可以在域类图中将上面这些类以及它们之间的关系表示出来,如图5-5所示。 图5-5 大学生论文管理系统域类图 5.3.3 系统活动图 活动图(Activity Diagram)反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程,如图5-6所示,描述了系统学生管理、论文管理、论文查阅的活动执行顺序。活动图是一种特殊的状态图,描述需要做的活动、执行这些活动的顺序(多为并行的)以及工作流(完成工作所需要的步骤)。它对于系统的功能建模特别重要,强调对象间的控制流程。 图5-6 系统活动图 这之后就可以进行详细设计了。考虑到篇幅限制,这里就不再赘述了,读者可参阅本书光盘中的范例。 至此,UML系统建模完成。 5.4 系 统 配 置 一个好的大学生论文管理系统必然有一个相对最优的系统配置方案。下面讨论如何根据用户的实际情况设计系统的配置,包括软件配置、硬件配置和网络配置。 5.4.1 软件配置 软件配置主要包括数据库的选择和操作系统的选择。大学生论文管理系统的软件配置要根据用户对系统的稳定性要求、系统的容量以及用户的维护水平来确定。 (1) 数据库的选择 可以根据数据量的大小选择不同的数据库,如表5-1所示。 表5-1 大学生论文管理系统数据库的选择 用 户(人) 每秒数据库并发 数据访问记录数 稳定性要求 维护水平 备选数据库 社区大学 500~5000 低 差 Access,MySQL 专业型大学 5000~50 000 中 一般 SQL Server,MySQL 综合型大学 50 000~200 000 较高 较好 SQL Server,Oracle 在本章中选择MySQL数据库。 (2) 操作系统的选择 可以根据用户量的大小选择不同的操作系统。当然,一般情况下,用户对Microsoft公司的Windows操作系统界面比较熟悉,因此,建议客户端使用Windows 2000或者Windows XP操作系统。 服务器端操作系统的选择如表5-2所示。 表5-2 大学生论文管理系统服务器端操作系统的选择 用 户(人) 每秒数据库并发 数据访问记录数 稳定性 要求 维护 水平 备选操作系统 社区大学 50~500 中 一般 Windows NT,Windows 2000 Server,Windows XP 专业型大学 500~2000 较高 较好 Windows NT,Windows 2000 Server,Windows XP,Linux,UNIX 综合型大学 500~2000 较高 较好 Windows XP,UNIX 在本章中选择Windows XP操作系统作为服务器端操作系统。 5.4.2 硬件配置 硬件配置主要包括客户端硬件的选择和服务器端硬件的选择。大学生论文管理系统的硬件配置要根据用户对系统的稳定性要求、系统的容量、系统的吞吐量,以及用户的维护水平来确定。这里只给出参考配置的范围,具体的配置需要根据用户的需求精确计算。 (1) 客户端硬件的选择 根据稳定性要求选择不同的客户端硬件,客户端硬件的选择如表5-3所示。 表5-3 大学生论文管理系统客户端硬件的选择 用 户 稳定性要求 备选客户端 学生客户端 中 Pentium Ⅲ/256MB/20GB (2) 服务器端硬件的选择 根据数据量和吞吐量的大小选择不同的服务器硬件,服务器端硬件的选择如表5-4所示。 表5-4 大学生论文管理系统服务器端硬件的选择 用 户(人) 每秒数据库并发数据访问记录数 稳定性 要求 维护 水平 备选服务器 社区大学 50~500 中 一般 Xeon双CPU/1GB/RAID5 3×72GB 专业型大学 50~500 中 一般 Xeon双CPU/1GB/RAID5 3×72GB 综合型大学 500~2000 较高 较好 小型计算机/双机热备 或者Xeon 4 CPU/4GB/RAID5 6×72GB 5.4.3 网络配置 大学生论文管理系统的网络配置一般有如下几种类型。 (1) 单机模式:即服务器和客户端在一台计算机上。 (2) 百兆模式:计算机网络的速度为百兆,如图5-7所示。 图5-7 大学生论文管理系统网络百兆配置 (3) 千兆模式:计算机网络的速度为千兆。实际上,没有必要给每个节点都配备千兆网络接口,只需要给服务器端配备千兆接口即可,如图5-8所示。 图5-8 大学生论文管理系统网络千兆配置 可以根据用户情况选择不同的网络配置,如表5-5所示。 表5-5 大学生论文管理系统网络配置的选择 用 户(人) 每秒数据库并发 数据访问记录数 稳定性 要求 维护 水平 备选网络方案 社区大学 50~500 中 一般 百兆模式 专业型大学 500~2000 较高 较好 百兆模式 综合型大学 2000以上 高 好 千兆模式 5.5 数据库分析 数据库分析是整个大学生论文管理系统开发过程中一个重要环节,它具体可分为两个部分:一是概念模型的分析,即E-R图的分析;二是逻辑模型的分析,即表与字段的分析。本节将使用PowerDesigner完成E-R图的分析和数据库建模。 5.5.1 系统E-R图 根据UML系统模型,可以确定系统中的各种实体以及它们之间的关系。本系统根据上面的设计规划出的实体包括:学生用户数据实体(kjc_people)、学院数据实体(kjc_college)、系所数据实体(kjc_department)、角色数据实体(kjc_role)、权限数据实体(kjc_right)、论文字典数据实体(kjc_code)、论文数据实体(kjc_paper)、科技专著数据实体(kjc_bookstatistic)、学术报告数据实体(kjc_report)等。通过对实体联系的分析,在本系统中使用PowerDesigner设计E-R模型。PowerDesigner的概念数据模型(CDM)把现实的信息简化为实体与实体之间的联系,它与DBMS无关。CDM的建立是一个比较复杂的过程,实体关系图的分析结果也非常复杂,一般情况下使用自底向上的方法,首先对局部视图进行分析设计,然后再实现视图集成。这里不再对局部视图进行设计,直接给出视图集成后的E-R图,如图5-9所示。 在进行详细的实体关系图设计时,使用用户信息进行系统用户基本信息的管理以及登录系统时用户名、密码和权限的设定;在设计时,论文管理、科技专著、学术报告3个模块主要涉及的功能是信息的发布, 图5-9 大学生论文管理系统实体关系图 5.5.2 表与字段分析 表与字段分析是建立在如图5-9所示的大学生论文管理系统E-R图的基础上,可以通过该E-R图确定系统中所有的表及其字段。表与字段分析后就可以使用PowerDesigner建立数据库模型了。PowerDesigner提供了工具产生表和字段并建立数据库模型,所以可以根据上面的E-R图直接生成数据库模型。对于复杂数据库,使用PowerDesigner可以有效减轻工作量并提高设计质量。建立的数据库模型如图5-10所示。 图5-10 大学生论文管理系统的数据库模型 5.6 数据库设计 在大学生论文管理系统的数据库设计中,首先要创建系统数据库,然后在数据库中创建需要的表和字段。 5.6.1 数据库结构设计 管理员进行基础信息的管理包括学院、系所、学生、角色管理,因此要包括4个数据实体。根据前面的分析可知,这4个实体要描述的信息分别如下。 学院数据实体:学院名称、负责人、电话、学院编号。 系所数据实体:系所名称、所属学院、负责人、电话、系所编号。 学生数据实体:工号(登录用户名)、登录密码、姓名、性别、民族、籍贯、出生日期、身份证号、职称、办公电话、手机、家庭电话、E-mail、备注、所在学院、所在科室、角色。 角色数据实体:角色编号、权限集合名称。 由于权限对应的是操作模块按钮的名称,在程序初始化时,这些数据都应该具有了,因此应用有如下的数据实体。 权限数据实体:权限编号、操作权限名称。 以上的5个实体都是基本的数据实体。 大学生论文管理系统的目的是进行论文管理,因此要包括如下的几个数据实体。 论文数据实体:编号、学院、作者、刊物名称、论文名称、收录情况、影响力、影响因子、引用次数、第几作者、备注。 论文字典数据实体:论文字典的类型、编号、名称。 科技专著数据实体:编号、学院、作者、字数(万字)、备注。 学术报告数据实体:编号、学院/学校、报告人、职务、报告人单位、报告名称、听众对象、人数、备注。 5.6.2 创建数据表 在这个数据库管理系统中要建立9张数据表。 学院数据表(kjc_college):用于存放学院数据。 系所数据表(kjc_department):用于存放系所数据。 学生数据表(kjc_people):用于存放学生数据。 角色数据表(kjc_role):用于存放角色数据。 权限数据表(kjc_right):用于存放权限数据。 论文数据表(kjc2_paper):用于存放论文数据。 论文字典数据表(kjc2_code):用于存放论文字典数据。 科技专著数据表(kjc2_bookstatistic):用于存放科技专著数据。 学术报告数据表(kjc2_report):用于存放学术报告数据。 这9张数据表的字段说明如表5-6~5-14所示。 表5-6 学院数据表(kjc_college) 编 号 字 段 名 称 字 段 类 型 说 明 1 Id Int(10) 惟一编号 Name Varchar2(50) 学院名称 Tel Varchar2(15) 办公电话 Man Varchar2(10) 负责人 Id Int(10) 惟一编号 Name Varchar2(50) 系所名称 Tel Varchar2(15) 办公电话 Man Varchar2(10) 负责人 college Int(10) 所属学院 d Int(20) 惟一编号 workid Varchar2(20) 工号,登录用户名 password Varchar2(20) 登录密码 Name Varchar2(20) 姓名 Sex Varchar2(2) 性别 Nation Varchar2(50) 民族 Addr Varchar2(100) 籍贯 Birth date 出生日期 Certid Varchar2(18) 身份证号 Post Varchar2(50) 职称 Officetel Varchar2(15) 办公电话 Mobile Varchar2(15) 手机 Hometel Varchar2(15) 家庭电话 E-mail Varchar2(100) 电子邮件 15 descs Varchar2(200) 备注 collegeid Int(10) 所在学院 (续表) 编 号 字 段 名 称 字 段 类 型 说 明 17 departmentid Int(10) 所在科室 roleid Int(10) 角色 Id Int(10) 惟一编号 Name Varchar2(50) 权限名称 Id Int(10) 惟一编号 Name Varchar2(50) 角色名称 Tel Varchar2(100) 权限集合 Int(10) 惟一字段 2 Bh Varchar2(20) 编号 3 Xy Varchar2(50) 学院 4 Zz Varchar2(20) 作者 5 Kwmc Varchar2(50) 刊物名称 6 Lwmc Varchar2(100) 论文名称 7 Slqk Int(10) 收录情况 8 Slqk_name Varchar(100) 收录情况 9 yxl Varchar2(10) 影响力 10 Yxyz Varchar2(5) 影响因子 11 Yycs Int(5) 引用次数 12 Djzz Int(5) 第几作者 13 bz Varcahr2(200) 备注 表5-12 论文字典数据表(kjc2_code) 编 号 字 段 名 称 字 段 类 型 说 明 1 Id Int(10) 数据表的惟一字段 2 codeid Varchar2(20) 查询字典的惟一字段 3 type Varchar2(20) 字典类别 4 name Varchar2(20) 字典描述 5 value Varchar2(20) 字典值列表 表5-13 科技专著数据表(kjc2_bookstatistic) 编 号 字 段 名 称 字 段 类 型 说 明 1 Id Int(10) 惟一字段 2 Bh Varchar2(20) 编号 3 Xy Varchar2(50) 学院 4 Zz Varchar2(20) 作者 5 cbs Varchar2(50) 出版社名称 6 Zs Varchar2(5) 字数(万字) 7 bz Varchar2(200) 备注 表5-14 学术报告数据表(kjc2_report) 编 号 字 段 名 称 字 段 类 型 说 明 1 Id Int(10) 惟一字段 2 Bh Varchar2(20) 编号 3 Xy Varchar2(50) 学院/学校 4 Bgr Varchar2(20) 报告人 5 Zw Varchar2(20) 职务 6 Bgrdw Varchar2(20) 报告人单位 7 Bgmc Varchar2(20) 报告名称 8 Tzdx Varchar2(20) 听众对象 9 Rs Varchar2(10) 人数 10 bz Varchar2(200) 备注 5.6.3 快速创建数据库 为了快速正确搭建系统,读者可以使用光盘中提供的本案例的数据文件来建立数据库。在建立数据库之前,应正确安装完成MySQL的数据库软件,并启动MySQL数据库服务。 安装步骤为:解压缩本案例的程序压缩文件,找到database目录,将article目录复制到%MySQL_HOME%;\data\目录下,重新启动MySQL服务。此时数据库就可以供程序使用了。数据库名为article,默认存在一个用户root,密码为空。 5.7 系 统 准 备 接下来要进行代码编写了,在进行编写之前,需要搭建系统的环境。最基础的就是从目录的建立开始,建立系统的基础应用模块和站点配置环境,并进行数据库的正常连接。 5.7.1 目录结构 在进行程序设计和开发之前要设计系统的目录结构,一般这个结构对任何的B/S系统都是通用的。本系统的目录结构如图5-11所示。 图5-11 目录结构 在该目录结构中,article代表本站点的根目录,它包含4个子目录:database用于存放数据库备份文件,doc用于存放系统的文档,web用于存放系统的JSP等的源文件,WEB-INF用于存放系统所使用的类包。其中web和WEB-INF是主要开发的目录。Web包含5个主要的子目录:kjc2_edit用于存放论文等的发布代码,kjc2_manage用于存放论文等的管理代码,main用于存放系统主框架程序代码,org用于存放管理员进行学院等的维护的代码,uer用于存放用户管理代码,其他的目录为图片等文件的目录。WEB-INF包含两个子目录:classes用于存放类文件,lib用于存放类包文件,同时该目录下还包括站点的配置文件web.xml。 这个目录结构是通用的目录结构,读者可以根据需要进行相应的修改。 5.7.2 通用模块 本系统采用数据库连接池进行数据库的统一管理,同时在数据库操作上进行了封装,方便程序开发时与数据库的交互,接下来详细看一下这两个方面。 (1) 数据库连接池 在实现某一个功能时,首先要连接数据库。如果在每一次需要进行数据库操作前都来加载驱动、创建连接,那么在连接的入口参数处理上将是十分零散,不好管理和维护。一旦系统移植,数据库参数改变,将需要重新修改所有的连接代码,重新编译,这项工作复杂,是不必要的,也是可以省去的。可以采用DBConnectionManager类来创建连接池,创建代码如下:nectionPoolName; String url = Configuration.DB_URL; if(url == null) { Logger.log(没有为连接池 + poolName + 指定Value(); } catch(NumberFormatException e) { Logger.log(错误的最大连接数限制: + maxconn + .连接池: + poolName); max = 0; } DBConnectionPool pool = new DBConnectionPool(poolName, url, user, password, max); pools.put(poolName, pool); Logger.log(成功创建连接池 + poolName); } 在此类中,有4个参数:即数据库的驱动、连接地址、用户名和密码,这4个参数存储在WEB-INF\conf.xml文件中。这样,在数据库移植或系统环境改变时,只须修改这个配置文件就可以了,十分方便。 文件confi.xml的配置参数如下所示:

  jdbc:MySQL://localhost:3306/article

  分别表示的参数为连接的地址、驱动名、数据库用户名、密码、连接池数量。如果读者创建的数据库参数与这里不同,直接修改此文件即可。 (2) 数据库封装 数据库已经进行连接,那么根据第1章的学习知道,在每一次需要进行数据库的某种操作时,只须调用对应的JDBC的函数就可以了。但是,在实际的开发中发现,直接使用JDBC函数将使代码的编写工作十分浪费。为了提高编写代码的效率,可以封装DataBase。该类封装了基本的操作函数。如下代码表示执行查询语句的函数: public ResultSet QuerySQL(String sql) { ResultSet rs = null; try { pstm = conn.prepareStatement(sql); rs = pstm.executeQuery(); }catch(SQLException sqle){} return rs; } 如下的代码封装了执行更新SQL语句的函数: public int ExecuteSQL(String sql) { try { pstm = conn.prepareStatement(sql); pstm.executeUpdate(); mit(); } catch(SQLException sqle) {} return 0; } 该类封装了数据库操作的基本函数,用于作为JavaBean的父类,便于统一管理。该类的一个重要作用是从连接池里取得一个连接,在使用结束时关闭连接。统一处理了这些额外的工作和异常的抛出,使设计者能够放心编写JavaBean。 5.7.3 配置站点与数据库连接 在讲解代码实现之前,先按照如下步骤搭建好站点的环境,以便直观学习。 (1) 安装JDK1.4.0 下载JDK1.4.0版本安装程序,连续单击“下一步”按钮,安装过程中均采用默认选择,直至安装结束。安装结束后,在桌面“我的电脑”图标上右击,在弹出的快捷菜单中选择“属性”命令,弹出“系统特性”对话框,在“高级”选项卡中单击“环境变量”按钮,在弹出的对话框中新建环境变量JAVA_HOME,值为C:\j2sdk1.4.0。 (2) 安装Tomcat 4.1.24 连续单击“下一步”按钮,直至安装结束,在选择安装路径时推荐安装在根目录,例如C:\Tomcat 4.1。 设置环境变量:在“我的电脑”属性中设置环境变量为TOMCAT_HOME= C:\Tomcat 4.1。 建立站点:修改C:\Tomcat 4.1\conf\server.xml,在

  此步骤应该对应程序安装的目录。 部署源程序:解压缩复制目录article,例如D:\,解压后的目录应该满足D:\ article \ WEB-INF。 (3) 访问系统 启动MySQL,Tomcat,输入地址即可访问,用户admin,密码初始化为admin。 至此,软件环境安装完成。 5.8 界面设计及代码实现 从上面系统的设计可知,本系统的界面共分为如下两大部分。 (1) 管理员管理模块,用于管理员进行系统初始化和系统管理,它包括如下几个部分。 学院管理:包括列表页面、新增页面、修改页面。 系所管理:包括列表页面、新增页面、修改页面。 人员管理:包括列表页面、新增页面、修改页面。 角色管理:包括列表页面、新增页面、修改页面。 (2) 学生论文管理模块,用于大学生进行论文、科技专著、学术报告发布和管理,包括如下几个部分。 论文管理:包括列表页面、新增页面、修改页面。 科技专著管理:包括列表页面、新增页面、修改页面。 学术报告管理:包括列表页面、新增页面、修改页面。 根据这些整体关系的设计,下面对每一个部分给出主要界面的设计及其设计思路。 5.8.1 登录模块设计和实现 用户要进行论文管理,就要拥有自己的登录入口,这是任何一个系统管理功能保密性的需要。根据数据库部分的设计知道,用户信息存放在数据表kjc_people中,初始化填入了一个系统管理员用户记录,用户为admin,密码为admin。在用户登录界面中,也包括用户名和密码的输入文本框,还要包括提交登录的按钮。登录界面如图5-12所示。 图5-12 登录界面设计 此界面除了用户管理员登录以外,还可以用于学生登录,凡是管理员新增的用户都可以通过它来进入系统。 在登录界面上工作证号和密码的输入框作为身份验证的依据。登录界面的程序都可以在所附光盘的web\main目录下找到上面登录窗口的代码可以查看所附光盘代码文件teacher\web\main\login.jsp。下面是其中的部分程序段

  表示表单提交之后,根据文件teacher\WEB-INF\web.xml中的配置被映射,下面就是相关的程序段。

  程序段中“*.cgi”表示先把servlet的类文件Base.ServletCtl.servlet映射为名字servletctl,然后把cgi为后缀的路径都自动转向servletctl进行监听处理,即当servletctl监视到后缀为cgi的提交数据时,会根据teacher\WEB-INF\servlet-config.xml中的配置

  进行处理,这也是基于标准MVC架构的开发模式控制的关键。学院维护页面代码在附光盘的web\org\college目录下。当单击学院维护按钮时,间接调用

  ,因为所调用路径带后缀cgi,所以与登录系统的用户名密码验证具有相同的跳页方式,具体配置如下面程序段所示

  select * from kjc_college order by mark

  配置文件中同样先打开数据库的连接、合法性检验,然后根据配置的SQL语句进行学院信息的查询、关闭数据库的连接,最后根据查询结果进行页面的跳转。

  表示根据所提供的SQL语句查询出来的信息放在college的对象中,以备在页面中显示。与之相对应的代码为学院维护代码相应目录下的文件main.jsp,下面抽取其中的主要代码进行讲解。

  db.getCount(college)表示取得对象名为college的对象的个数,即系统数据库中一共有多少条学院的记录信息 db.getAttributeStr(college.mark,i)表示第i个college对象的mark属性,即学院编号;db.getAttributeStr(,i)则表示取得学院的名称修改表示单击修改按钮,则带参数id跳转到modify.cgi进行处理。删除表示单击删除按钮,则带参数id跳转到deletecollege.cgi进行处理。 关于修改和删除详细处理后面会逐步介绍。当然,实现完学院信息的列表显示之后,首先会先想到如何新增一个学院。可以看到,学院信息列表页的新增按钮处代码是

  根据以上程序段可知,首先打开数据库的连接、进行合法性检验,然后根据配置的SQL语句进查询、关闭数据库的连接,最后根据查询结果等进行页面的跳转。 新增学院界面的jsp代码为newcollege.jsp文件,此页面代码比较容易理解,读者可以查看代码文件。此处就详细介绍一下选人,选人的页面分为两个区域:左边为树形结构显示学校的所有机构;右边为显示人员的界面。选中左边的机构之后,右边上面的列表框中会显示选中机构的所有人员,然后根据需要把所要选择的人员选到下面的列表框中。选人界面的相关jsp代码,在目录web\SelectMan下,被封装成一个组件。具体调用方法如下面称序段所示

  程序段中window.open()的第一个参数: ../../SelectMan/stepMem.jsp?count=1&txt_rybh=txt_rybh&txt_rymc=txt_rymc 以上代码表示打开选人界面。参数count=1表示所要选择的人员个数1,参数txt_rybh =txt_rybh表示选择人员后把人员编号返回到name=txt_rybh的隐藏框中,参数txt_rymc= txt_rymc表示选择人员后把人员名称返回到name=txt_rybh的文本框中。因此只要调用选人组件的时候根据要求设置参数count、txt_rybh和txt_rymc即可。 最后剩下的就是删除操作了,删除操作对新增和修改来说,相对简单一些。在学院信息的列表页面按钮对应的代码修改根据传递的参数id标记定位所要删除的学院信息记录,然后根据配置信息进行删除学院的操作,配置信息如下面程序段所示。

  系统配置模块的学院维护的功能都已经实现了,不难发现此开发模式页面代码比较简洁,在编写过程中主要的工作放在了配置文件的编写,充分体现出MVC的优点。系所维护jsp页面代码在光盘的teacher\web\org\department目录下。当单击按钮系所维护时,间接调用

  select * from kjc_department order by college

  先打开数据库的连接、合法性检验,然后根据配置的SQL语句进行学院信息的查询、关闭数据库的连接,最后根据查询结果等进行页面的跳转。

  根据所提供的SQL语句查询出来的信息放在department对象中,以在页面中显示。 系所维护列表信息界面如图所示。与之相对应的代码为系所维护代码相应目录下的文件main.jsp,下面抽取其中主要程序段进行讲解。

  %//循环取得所有学院,供选择作为所属单位 for(int j=0;j

  db.getCount(department)表示取得对象名为department的对象的个数,即取得数据库中存在的系所的记录数;db.getAttributeStr(,i)则表示取得系所的名称。修改表示单击修改按钮,则带参数id跳转到modify.cgi进行处理。删除表示单击删除按钮,则带参数id跳转到deletedepartment.cgi进行处理。 介绍完系所信息的列表显示之后,首先新增一个系所。可以看到,系所信息列表页的新增按钮处代码是添加部门,根据servlet-config.xml中的配置,如下面程序段所示

  /web/org/department/newdepartment.jsp

  同样先打开数据库的连接、合法性检验,然后根据配置的SQL语句进查询、关闭数据库的连接,最后根据查询结果等进行页面的跳转。 相关的jsp页面代码为系所维护对应目录下newdepartment.jsp文件,此页面代码比较容易理解。其中的所属部门,即为学院级的部门,填写完所需信息,在添加新增系所界面上单击提交按钮页面表单数据被提交,然后根据下面程序段所示的配置信息进行处理。

  insert into kjc_department (name,tel,man,college) values(?,?,?,?)

  读者是否已经发现对系所的维护与对学院的维护有非常相似的地方。为了节约篇幅,这里就不再重复读者可以参照学院维护的讲解对照光盘中的代码。对于人员的维护主要要实现新增、修改、删除以及查看某人的详细信息,相关的所有代码放在teacher\web\user目录下。进入人员维护首页,以列表的形式显示系统中所有人员的信息显示所有人员列表信息对应的代码文件为main.jsp,下面其中的部分主要程序段。

  新增人员的代码文件为teacher\web\user\new.jsp,下面是其中部分程序段解释function go() { if(.value==document.all.workid.value==document.all.password.value==) { //检验用户姓名、号和密码是否已经填写, //只要其中之一没有填写则给提示 alert(姓名、号、密码必填!); }else if(document.all.college[document.all.college.selectedIndex].value==0 document.all.department[document.all.department.selectedIndex].value==0){ //检验所要添加的人员所属的机构是否填写,如果没有则给提示 alert(请检查学院、系所是否选择,为必填项!); }else{ //对所填写的人员信息进行提交 document.all.form1.action=add.cgi; document.all.form1.submit(); } } 此javascript脚本函数主要是在执行新增操作时提供简单的数据检验。 修改、查看人员信息的代码文件分别是modify.jsp和show.jsp,读者可以对照前面学院、系所的介绍进行自行理解。 的主要功能是新增、修改和删除角色,代码文件在web\role目录下。

  添加角色的页面是role\newrole.jsp。此页面提供了角色名称的输入框和权限的选择框,在执行提交时需要将这些参数组合起来提交给数据库。由于选择的权限是一系列的选择框,而数据库中存储的是这些权限所对应的编号的组合字符串,因此在执行提交之前需要通过javascript代码进行组合,代码如下: function getChkValue(obj){ var selitem = ; var x = 0; try{ x = obj.length; for(i=0; i

  obj.length; i++) if(obj[i].checked) if(selitem==){ selitem = obj[i].value; } else{ selitem = selitem + , + obj[i].value; } } finally{ if (obj.checked) selitem = obj.value; } return selitem; } 该代码逐个循环判断每一个权限的选择框,如果选择框的checked为true,则表示选择了该权限,需要取出该值,否则抛弃该值。 修改权限的编写方法与增加相似,删除也与前面的执行方式相似,此处就不再赘述。 5.8.6 论文管理模块设计与实现 学生登录系统后,要发布论文,就要提供论文发布的界面。论文提交时需要填写的字段有论文编号、学院、作者、刊物名称、论文名称、收录情况、影响力、影响因子、引用次数、第几作者和备注。其中论文编号、作者、论文名称为必填字段,因此需要加以标记,用*号区分。收录情况和影响力是数据字典中的数据,在此处也需要提供选择和添加的入口。因此,界面设计的结果如图5-22所示。 图5-22 发布论文界面设计 学生在发布完论文后,需要查阅和修改等管理工作,因此就需要提供管理的操作界面。在此界面中,首先需要对论文的基本信息进行提取显示,包括论文名称、作者、刊物名称、收录情况、影响力、引用次数、备注。为了查看论文的详细情况,需要提供查看链接,本处从论文标题进行链接。对于每一篇论文,都需要提供修改和删除的按钮。设计界面如图5-23所示。 图5-23 论文管理界面设计 发布论文对应的页面为kjc2_edit\add4.jsp。该页面提供了数据输入框,在执行提交时提交给页面kjc2_edit\action.jsp执行提交。提交中,首先取得初始化bean操作类commonbean的对象 mybean,通过该类初始化当前要执行插入的数据表的信息。其次取得页面输入的各个参数,保存在变量中。在执行插入之前,要判断论文编号的惟一性,如果惟一则将用户输入的参数保存在hashtable中,通过函数add执行提交数据库。onbean mybean = new com.db.commonbean(); mybean.init(kjc2_paper,id desc,id#num#1#bh#char#0#xy#char#0#zz#char#0#kwmc#char#0#lwmc#char#0 #slqk#num#0#slqk_name#char#0#yxl#char#0#yxyz#char#0#yycs#num#0#djzz#num #0#bz#char#0#toall); string []str = new string[12]; str[0] = ds.tostring((string)request.getparameter(txt_lwbh)); str[1] = ds.tostring((string)request.getparameter(txt_xymc)); str[2] = ds.tostring((string)request.getparameter(txt_zz)); str[3] = ds.tostring((string)request.getparameter(txt_kwmc)); str[4] = ds.tostring((string)request.getparameter(txt_lwmc)); str[5] = ds.tostring((string)request.getparameter(sel_slqk)); str[6] = ds.tostring((string)request.getparameter(sel_yxl)); str[7] = ds.tostring((string)request.getparameter(txt_yxyz)); str[8] = ds.tostring((string)request.getparameter(txt_yycs)); str[9] = ds.tostring((string)request.getparameter(txt_djzz)); str[10] = ds.tostring((string)request.getparameter(txt_memo)); str[11] = ds.tostring((string)request.getparameter(txt_slqkname)); //查询论文编号的惟一性 mybean.settabname(kjc2_paper); mybean.setorderby(bh); vect = mybean.getalldata( bh=+str[0]+); if(vect.size()!=0) response.sendredirect(err.jsp?errcode=4); else{ hashtable hash = new hashtable(); hash.put ( bh , str[0] ); hash.put ( xy , str[1] ); hash.put ( zz , str[2] ); hash.put ( kwmc , str[3] ); hash.put ( lwmc , str[4] ); hash.put ( slqk , str[5] ); hash.put ( yxl , str[6] ); hash.put ( yxyz , str[7] ); hash.put ( yycs , str[8] ); hash.put ( djzz , str[9] ); hash.put ( bz , str[10] ); hash.put ( slqk_name , str[11] ); backid = + mybean.add ( hash ) ; mybean.closeconn ( ) ; response.sendredirect(success.jsp); } 执行论文的修改与发布论文的编写方法相似,此处不再赘述。 发布完了论文,可以对论文进行查看,对应的代码为kjc2_manage\list4.jsp。该页面中,首先初始化bean对象mybean,通过该对象执行查询sql查询出数据,保存在vector类型变量中,代码如下。 com.db.commonbean mybean = new com.db.commonbean(); string sql = select * from kjc2_paper; vector vectpaper = (vector)mybean.getonepagebymssql(sql,cur,pagerow); 接下来使用循环逐条显示论文的记录,代码如下。每一行记录都是一个hashtable类型的对象,再根据字段的键值取出各个字段的数据。

  % int sizepaper = vectpaper.size(); for(int i=2;i

  5.8.7 科技专著管理模块设计与实现 学生登录系统后,要发布科技专著,就要提供科技专著的界面。科技专著提交时需要填写的字段有专著编号、学院、作者、出版社、字数和备注。其中专著编号和作者字段为必填字段,因此需要加以标记,用*号区分。界面设计的结果如图5-24所示。 图5-24 发布科技专著界面设计 学生在发布完科技专著后,需要查阅和修改等管理工作,因此需要提供管理的操作界面。在此界面中,首先需要对科技专著的基本信息进行提取显示,包括科技专著编号、学院、作者、出版社、字数。为了查看科技专著的详细情况,需要提供查看链接,本处从科技专著编号进行链接。对于每一篇科技专著,都需要提供修改和删除的按钮。设计界面如图5-25所示。 图5-25 科技专著管理界面设计 发布科技专著对一个的页面为kjc2_edit\add5.jsp。该页面提供了数据输入框,在执行提交时提交给页面kjc2_edit\action.jsp执行提交。提交中,首先取得初始化Bean操作类CommonBean的对象 myBean,通过该类初始化当前要执行插入的数据表的信息。其次取得页面输入的各个参数,保存在变量中。在执行插入之前,要判断论文编号的惟一性,如果惟一则将用户输入的参数保存在Hashtable中,通过函数add执行提交数据库。 com.db.CommonBean myBean = new com.db.CommonBean(); myBean.init(kjc2_bookstatistic,id desc,id#NUM#1#bh#CHAR#0#xy#CHAR#0#zz#CHAR#0#cbs#CHAR#0#zs#CHAR#0#bz #CHAR#0#toall); String []str = new String[6]; str[0] = ds.toString((String)request.getParameter(txt_zzbh)); str[1] = ds.toString((String)request.getParameter(txt_xymc)); str[2] = ds.toString((String)request.getParameter(txt_zz)); str[3] = ds.toString((String)request.getParameter(txt_cbs)); str[4] = ds.toString((String)request.getParameter(txt_zs)); str[5] = ds.toString((String)request.getParameter(txt_memo)); //查询专著编号的惟一性 myBean.setTabName(kjc2_bookstatistic); myBean.setOrderBy(bh); vect = myBean.getAllData( bh=+str[0]+); if(vect.size()!=0) response.sendRedirect(err.jsp?errcode=5); else{ Hashtable hash = new Hashtable(); hash.put ( bh , str[0] ); hash.put ( xy , str[1] ); hash.put ( zz , str[2] ); hash.put ( cbs , str[3] ); hash.put ( zs , str[4] ); hash.put ( bz , str[5] ); backid = + myBean.add ( hash ) ; myBean.closeConn ( ) ; response.sendRedirect(success.jsp); } 执行科技专著的修改与发布科技专著文的编写方法相似,在此不再赘述。 发布完了论科技专著,就需要进行查看,对应的代码为kjc2_manage\list5.jsp。在该页面中,首先初始化Bean对象myBean,通过该对象执行查询SQL查询出数据,保存在Vector类型变量中,代码如下。 com.db.CommonBean myBean = new com.db.CommonBean(); String sql = select * from kjc2_bookstatistic; Vector vectstatic = (Vector)myBean.getOnePageByMSSQL(sql,cur,pagerow); 接下来使用循环逐条显示论文的记录,代码如下。每一行记录都是一个Hashtable类型的对象,再根据字段的键值取出各个字段的数据。

  % int sizestatic = vectstatic.size(); for(int i=2;i

  GB T 32610-2016_日常防护型口罩技术规范_高清版_可检索.pdf