数据库课程设计报告
-----图书馆信息管理系统
学院:软件学院 专业:软件工程 班级:**级软件*班
姓名:** 学号:***********
任课教师:彭朝晖 实验教师:王诚梅 助教:**
目录
前言--------------------------------------------------------------3 一.系统开发平台
1.1开发平台简介--------------------------------------------------4 1.2一些细节问题 -------------------------------------------------4
二.数据库规划
2.1任务陈述------------------------------------------------------4 2.2任务目标------------------------------------------------------5
三.系统定义----------------------------------------------5 四.需求分析
4.1用户需求说明--------------------------------------------------6 4.2系统需求说明--------------------------------------------------9
五.数据库逻辑设计
5.1ER图---------------------------------------------------------10 5.2数据字典-----------------------------------------------------12 5.3用户视图中的表-----------------------------------------------14
六.数据库物理设计
6.1基本表的实现-------------------------------------------------15 6.2具有派生数据的表的示例---------------------------------------19 6.3索引---------------------------------------------------------19 6.4安全机制-----------------------------------------------------19
七.应用程序设计
7.1功能模块-----------------------------------------------------19 7.2界面设计-----------------------------------------------------31 7.3事务设计-----------------------------------------------------31
八.测试和运行-------------------------------------------31
九.部分代码分析
9.1首页跳转代码-------------------------------------------------31 9.2用户登陆信息显示---------------------------------------------31 9.3数据库操作通用类---------------------------------------------32
十.总结-------------------------------------------------33 附参考文献-----------------------------------------------35
2
前言
随着科学技术的高速发展,我们已步入数字化、网络化、信息化的时代。图书馆是学校的文献信息中心,是为全校教学和科学研究服务的学术性机构,是学校信息化的重要基地。图书馆的工作是学校教学和科学研究工作的重要组成部分,是全校师生学习和研究的重要场所。为了更好地适应这种网络数字化信息的环境,提高利用图书馆检索信息的效率,一种成功的跟踪最新技术、充分利用软硬件资源、扎根于准、新、全数字资源的\图书馆信息管理系统\已孕育而生。
图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息、图书预约信息等。人工记录方法既效率低又错误过多,大大影响了图书馆的正常管理工作。因此需要对书籍信息、读者信息、借书信息、还书信息、图书预约信息等进行统一管理,及时了解各个环节中信息的变更,有利于管理效率的提高,同时为了提高工作效率、服务质量和管理水平,并使图书馆管理人员从繁琐的工作中解脱出来,故开发该图书馆信息管理系统。
目前我校已经有一套功能比较完备的图书馆信息管理系统,但是在使用过程中,由于管理员以及读者不断提出新的功能需求,使现有系统的局限性逐渐体现出来,所以本系统在实现现有系统功能的基础之上,又实现了几种为用户提供便利的功能,使得本软件能够更好的满足用户的需求、更具人性化、使用起来更加方便。
3
正文
一系统开发平台
1.1开发平台简介
本图书馆信息管理系统采用B-S架构,使用Java EE的技术路线,遵守MVC Model2模型。
Model模型层使用数据库作为持久性储存结构,选用的后台数据库是MySQL5.0。这是业界领先的开源数据库,在开源产品中具有仅次于Apache服务器的市场占有率。本数据库开放源代码,具有免费使用,比较稳定的特点,适合于小型系统的持久性存储。Model使用Java Beans作为OO层面上的抽象。
View视图层使用JSP技术。这是Java EE平台推荐的表现层技术。图书馆信息管理系统中使用JSP2.0规范,严格控制页面代码中的业务逻辑部分,做到不在HTML代码中混杂Java业务代码,实现了很好的业务和表现的分离。在这里采用的JSTL标准标签库来达到这一目标。
Controller控制层采用Servlet技术。页面获取的数据通过Servlet的转发传递给后面的Java Beans进行数据的封装和与数据库的交互,反馈信息由Java Beans传递给Servlet,再由Servlet进行转发,从而实现业务逻辑和表现的完全分离。
本图书馆信息管理系统使用struts1.2作为MVC开发框架,整个系统有struts框架作为MVC的后台运行支持。struts1.2框架是业界最早的也是最稳定和成熟的MVC开发框架,经过时间的洗礼已经被证明是一款很优秀的MVC框架,尽管还存在一些不足之处,但struts已经是可以选择的最好的框架技术。
本图书馆信息管理系统的软件开发平台是MyEclipse6.0GA + Dreamweaver CS3。
它的软件运行平台是Apache Tomcat 6.0 + JSTL + struts1.2。
1.2一些细节问题
图书馆信息管理系统中存在大量的表单提交。这里我们采用JavaScript进行客户端的简单验证。对于一些相对简单的验证,比如表单提交项是否为空,两次密码的输入是否一致等,将这样的验证过程由服务器端转移到客户端可以减轻服务器的负担,从而为更多客户提供更好的服务。
对于页面菜单的设计,考虑到浏览器兼容的问题,采取最大兼容的代码。经过实际测试,该代码可以正常显示在当前主流浏览器内核之上。测试浏览器包括IE6,IE7,Firefox,Opare9。
二数据库规划
2.1.任务陈述
图书馆信息管理系统数据库用以收集、存储书籍信息、人员(读者、图书管理员)信息、图书借阅信息以及意外处理信息,及时记录存储各个环节信息的变更,以便管理、查询、显示、输出,节约大量人力物力把人们从繁杂的手工记录方式
4
中解脱出来的同时,有力保障图书馆日常事务的高效运作。
2.2.任务目标
目标类别 人员信息管理 子目标 读者信息管理,包括读者类别、性别、借书数量、借书期限、备注等的输入、修改、删除、显示以及报表呈现。 图书馆管理员信息管理,包括管理员权限、性别、备注等的输入、修改、删除、显示以及报表呈现。 书籍基本信息管理,包括书籍编号、类别、关键词、备注等的输入、修改、删除、显示以及报表呈现。 借书信息管理,包括书籍编号、读者编号、借书日期、借书期限、备注等的输入、修改、删除、显示以及报表呈现。 还书信息管理,包括书籍编号、读者编号、还书日期、还书期限、备注等的输入、修改、删除、显示以及报表呈现。 续借、超期赔偿、丢失赔偿、损坏赔偿等信息的输入、修改、删除、显示以及报表呈现。 书籍信息管理 借阅信息管理 意外处理信息管理
三.系统定义
本图书馆信息管理系统主要面向各大图书馆的图书管理以及相关人员,读者和图书管理员。旨在实现图书管理的信息化,把人们从繁杂的手工记录方式中解脱出来,实现高效准确的管理。根据我对图书馆工作和管理模式的了解,再结合上网查找到的资料和从学校图书馆工作人员那里了解到的情况,做出如下设计:本系统将用户分为读者、图书馆管理员两种身份,共同参与图书的流通管理过程。 图书馆管理员权限:具有该系统的最高权限,对系统进行管理,可对数据库进行系统所提供的所有操作,并负责图书流通过程中的借书、还书操作。权限具体陈述如下:
1、图书管理:包括图书的录入、查询、修改和删除。
2、管理员信息管理:添加、查询、修改、删除所有管理员的信息。 3、读者管理:包括读者信息的添加、查询、修改、删除等。
4、系统数据处理:数据查询,包括查看当前在馆书籍信息、当前所有违章罚款信息、所有被预约图书信息等。
5、管理员的个人功能:包括查看个人信息、修改密码、重新登陆、退出系统等。
5
6、图书流通中的借书操作:借书时需要输入用户号和图书ISBN。如果该图书可借,则正常借书,提示“借阅成功”;如果该书不可借,则弹出窗口提示。
7、图书流通中的还书操作:还书时需要输入用户号和图书ISBN。若正常还书,点击确定即可;若读者违章,可填写违章记录,并处以罚款。
8、察看读者的请求信息,加以处理。
读者权限:使用系统的相应查询功能。具体权限如下: 1、图书检索功能(包括简单检索和高级检索)。 2、查看个人信息、修改密码等个人信息。 3、查看个人借阅历史。
4、续借已借图书:在查看个人借阅历史模块里实现,当前已借未还未续借的每本书后面都有一个续借按钮,选中后点击可以实现该书的续借。
5、图书预约:可查看自己的预约信息及处理情况,也可通过填写预约表单预约图书。
6、查看违章欠款记录。
四.需求分析
4.1用户需求说明
4.1.1数据需求
图书馆分为若干个分馆,分馆名称唯一。每个分馆都藏有图书,系统可以浏览、操作、管理各个分馆的图书信息。对应书籍实体的图书信息包括图书的编号,ISBN ,名称,第一、第二、第三作者,书名的汉语拼音缩写,内容简介,入库时间,书籍单价,图书馆购进图书总数,书籍当前在库数目,书籍所在馆号,书籍外借数目等。除了一些从服务器自动获取的信息外,大部分图书信息都由管理员来维护。
此外管理员还可维护图书馆管理员信息、读者信息、分馆信息、权限信息、不良记录信息。图书馆管理员信息和读者信息由用户编号、用户密码、用户密码提示问题、用户名字、用户权限、用户年龄、用户性别、用户不良记录、用户请求记录组成。其中读者可以自行维护除编号、权限、不良记录以外的其它信息。
读者在借书之前必须先注册,注册后便可进行借书、还书、留言等一系列操作。借书信息包括借书记录号、用户号书籍编号、借阅日期、是否续借、是否归还等信息。
对于读者的不良记录,系统将予以存储。存储的信息有不良记录编号、借阅编号、不良记录描述。
对应于用户请求记录实体的请求信息包括请求信息编号、用户编号、请求描述、请求发出时间、该请求是否实现等内容。
6
4.1.2事务需求
? 数据录入
a 新用户注册时录入自己的详细情况; b 录入新进图书的各项信息; c录入分馆的基本信息;
d用户登录后录入自己的请求信息; e管理员录入用户的不良记录 ? 数据更新/删除
f 更新/删除用户的个人信息;
g 更新/删除某些图书的基本信息; h更新/删除某些图书的借阅信息; i更新/删除某些分馆的基本信息; j更新/删除某些用户的请求信息; ? 数据查询
k查询用户的个人信息; l查询图书的基本信息; m查询图书的借阅信息; n查询分馆的基本信息; o查询用户的请求信息;
p查询用户的不良记录信息; 4.1.3系统用例
用例:
7
用例总图:
4.1.4 组件图
4.1.5部署图
8
4.2系统需求说明
4.2.1网络和共享需求:
? 所有分馆必须安全的和总部数据库网络互连; ? 必须能够支持每个分馆至少3名用户同时访问; 4.2.2性能:
? 单个记录查询时间少于3秒 ? 多个记录查询时间少于6秒 ? 更新/保存记录时间少于2秒 4.2.3安全性:
? 必须有口令保护
? 每个用户分配特定的用户视图所应有的访问权限 4.2.4法律问题:
? 对管理员和读者信息管理,遵守法律 4.2.5 运行需求
4.2.5.1用户界面 ? 使用浏览器界面结构,采用导航栏界面方式,尽力带给操作用户便利,对
用户友好;对鼠标和键盘单独支持。
4.2.5.2硬件接口 ? 本软件需要能够互联网的支撑,用户的硬件平台应该能够与互联网连接。
4.2.5.3软件接口 ? 运行于Windows98及更高版本的Windows操作系统之上,或者其他系统。
4.2.5.4故障处理 ? 正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数
据库完好无损。 4.2.6其它需求
? 系统的功能实现情况: 用户可在本系统下实现各种用户要求的功能
? 系统的安全性: 对于系统的重要数据都有密码保护,具有一定的安全性 ? 系统的容错性: 用户输错数据都有提示信息,具有较好的容错性能。 ? 系统的封闭性: 用户的封闭性较好,用户基本上在提示信息下输数据。
9
五.数据库逻辑设计
5.1E-R图
图书信息管理系统的数据库可以设计定义用户(由权限可分为管理员和普通读者)、书籍、图书馆、借书信息、请求信息和不良记录信息等实体及其之间的联系。实体使用E-R图进行描述。为清楚起见,这里将实体图和联系图分开表现。
5.1.1实体图:
5.1.1.1书籍信息的E-R图:
年龄 密码提示问题 特殊请求 不良记录 密码 编号 用户 名字 权限 密码提示问题答案 在库总数 购进所在库号 总数 入库时间 外借数目 单价 ISBN 编号 内容书籍 简介 书名 作者 拼音缩写 5.1.1.2用户信息的E-R图:
性别
5.1.1.3图书馆信息的E-R图:
编号 图书馆 名字 10
5.1.1.4 请求信息的E-R图: 用户 编号 编号 请求 内容 请求信息 请求是请求 否完成 时间
5.1.1.5不良记录的E-R图:
借书 编号 不良记录 编号 描述
5.1.2.联系图:
读者
编号 书籍 编号 编号 读者 借阅 书籍 借阅 时间 是否是否 归还 续借
管理员 管理 用户
11
管理员 管理 不良记录 管理员 管理 书籍 管理员 管理 请求信息 5.2数据字典
根据上面描述的E-R图进行数据库的逻辑结构设计。在这里以表格的形式给出数据库的设计。下面表中的字段除特殊标明的外,均不能为空。
(5.2.1)书籍实体。 字段 类型 备注 book_id int(11) 主键,书籍编号,自增类型 book_isbn book_title book_author0 book_author1 book_author2 book_chinese_short book_introduction book_year book_price book_amount book_amount_in book_which_lib varchar(30) varchar(100) varchar(20) varchar(20) varchar(20) varchar(50) text date decimal(11,0) int(3) int(3) int(2) 书籍ISBN 书籍名称 第一作者 第二作者,可以为空 第三作者,可以为空 书名的汉语拼音缩写,用于支持拼音查找 书籍内容简介 入库时间,该时间从服务器获取 书籍单价 购进书籍总数 书籍当前在库数目 书籍所在馆号 书籍外借数目,该字段由book_amount和book_amount_in字段计算得出,用于快速查找 book_how_many_borrowed int(3) 12
(5.2.2)用户实体。在这里的用户具有管理员和普通读者的权限。 字段 类型 备注 user_id int(11) 主键,用户编号,由用户自主选择,只能由数字构成 user_password varchar(20) 用户密码 user_password_question varchar(50) 用户密码提示问题,用于用户忘记密码时找回密码之用 user_password_question_answer varchar(50) 用户密码提示问题答案,用于用户忘记密码时找回密码之用 user_name varchar(20) 用户名字 user_purview varchar(2) 外码,指向user_pruview,用户权限 user_age tityint(3) 用户年龄 user_sex enum('0','1') 用户性别,枚举类型,0代表“男”,1代表“女” user_durty_record int(11) 外码,指向durty_info,不良记录,可以为空 user_quest_record int(11) 外码,指向request_info,请求记录,可以为空 (5.2.3)图书馆实体。 字段 类型 备注 lib_id int(2) 主键,图书馆编号 lib_name varchar(50) 图书馆名字
(5.2.4)请求记录实体。 字段 类型 request_id int(11) request_user_id int(11) request_describetion varchar(100) request_date date request_finished tinyint(1) (5.2.5)不良记录信息实体。 字段 类型 durty_id int(3) durty_borrow_id durty_describetion int(11) varchar(100) 备注 主键,自增类型 借阅编号 不良记录描述 备注 主键,自增类型 用户编号 请求描述,由用户输入 请求发出时间 该请求是否实现,0代表为实现,1代表已经实现 13
(5.2.6)借阅联系。 字段 borrow_id borrow_user_id borrow_ book_id borrow_date borrow_reborrow 类型 int(11) int(11) int(11) date tinyint(1) borrow_is_return tinyint(1) 备注 主键,自增类型 外码,指向user_info,用户编号 外码,指向book_info,书籍编号 借阅日期,从服务器获得 是否续借,0代表没有续借,1代表已经续借,最大续借次数为1次,默认为0 是否归还,0代表未归还,1代表已经归还,默认为0 5.3用户视图中的表
(1)Book_info(book_id,book_isbn,book_title,book_author0,book_author1,
book_author2,book_chinese_short,book_introduction,book_year,book_price,book_amount,book_amount_in,lib_id,book_how_many_borrowed)
主键:book_id
外码lib_id参照Lib_info (lib_id)
(2)User_info(user_id,user_password,user_password_question,
user_password_question_answer,user_name,purview_id,user_age,user_sex,durty_id,request_id)
主键:user_id
外码purview_id参照User_purview(purview_id)
(3)Lib_info(lib_id,lib_name)
主键:lib_id
(4)Request_info(request_id,user_id,request_describetion,request_date,request_finished) 主键:request_id
外码user_id参照User_info (user_id)
(5)Durty_info(durty_id,borrow_id,durty_describetion) 主键:durty_id
外码borrow_id参照Borrow_info (borrow_id)
(6)Borrow_info(borrow_id,user_id,book_id,borrow_date,borrow_reborrow,borrow_is_return)
主键:borrow_id
外码user_id参照User_info (user_id) 外码book_id参照Book_info (book_id)
(7)user_purview(purview_id,purview_name)
14
主键:purview_id
六数据库物理设计
6.1基本表的实现
创建表及数据库的SQL语句如下:
# SQL Manager 2007 for MySQL 4.1.1.2
# --------------------------------------- # Host : localhost # Port : 3306 # Database : library
SET FOREIGN_KEY_CHECKS=0;
CREATE DATABASE `library` CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
USE `library`;
#
# Structure for the `lib_info` table : #
CREATE TABLE `lib_info` ( `lib_id` int(2) NOT NULL, `lib_name` varchar(50) NOT NULL, PRIMARY KEY (`lib_id`),
UNIQUE KEY `lib_id` (`lib_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#
# Structure for the `book_info` table : #
CREATE TABLE `book_info` (
`book_id` int(11) NOT NULL auto_increment, `book_isbn` varchar(30) NOT NULL, `book_title` varchar(100) NOT NULL, `book_author0` varchar(20) NOT NULL,
`book_author1` varchar(20) default NULL,
15
`book_author2` varchar(20) default NULL, `book_chinese_short` varchar(50) NOT NULL, `book_introduction` text NOT NULL, `book_year` date NOT NULL,
`book_price` decimal(11,0) NOT NULL, `book_amount` int(3) NOT NULL, `book_amount_in` int(3) NOT NULL,
`book_which_lib` int(2) NOT NULL,
`book_how_many_borrowed` int(5) NOT NULL, PRIMARY KEY (`book_isbn`), UNIQUE KEY `book_id` (`book_id`), UNIQUE KEY `book_isbn` (`book_isbn`), UNIQUE KEY `book_isbn_2` (`book_isbn`), KEY `book_which_lib` (`book_which_lib`),
CONSTRAINT `book_info_lib_fk` FOREIGN KEY (`book_which_lib`) REFERENCES `lib_info` (`lib_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
#
# Structure for the `borrow_info` table : #
CREATE TABLE `borrow_info` (
`borrow_id` int(11) NOT NULL auto_increment, `borrow_user_id` int(11) NOT NULL, `borrow_book_isbn` varchar(30) NOT NULL, `borrow_date` date NOT NULL,
`borrow_reborrow` tinyint(1) default '0', `borrow_is_return` tinyint(1) default '0',
PRIMARY KEY (`borrow_id`),
UNIQUE KEY `borrow_id` (`borrow_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
16
#
# Structure for the `durty_info` table : #
CREATE TABLE `durty_info` (
`durty_id` int(3) NOT NULL auto_increment, `durty_borrow_id` int(11) NOT NULL,
`durty_describetion` varchar(100) NOT NULL, PRIMARY KEY (`durty_id`),
UNIQUE KEY `durty_id` (`durty_id`),
KEY `durty_borrow_id` (`durty_borrow_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
#
# Structure for the `request_info` table : #
CREATE TABLE `request_info` (
`request_id` int(11) NOT NULL auto_increment, `request_user_id` int(11) NOT NULL,
`request_describetion` varchar(100) NOT NULL, `request_date` date NOT NULL,
`request_finished` tinyint(1) NOT NULL default '0', PRIMARY KEY (`request_id`),
UNIQUE KEY `request_id` (`request_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
#
# Structure for the `user_purview` table :
17
#
CREATE TABLE `user_purview` (
`purview_id` varchar(2) NOT NULL, `purview_name` varchar(20) NOT NULL, PRIMARY KEY (`purview_id`),
UNIQUE KEY `pruview_id` (`purview_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#
# Structure for the `user_info` table : #
CREATE TABLE `user_info` (
`user_id` int(11) NOT NULL,
`user_password` varchar(20) NOT NULL,
`user_password_question` varchar(50) NOT NULL,
`user_password_question_answer` varchar(50) NOT NULL, `user_name` varchar(20) NOT NULL, `user_purview` varchar(2) NOT NULL, `user_age` tinyint(3) NOT NULL,
`user_sex` enum('0','1') NOT NULL default '0', `user_durty_record` int(11) default NULL, `user_quest_record` int(11) default NULL, PRIMARY KEY (`user_id`),
UNIQUE KEY `user_id` (`user_id`), KEY `user_purview` (`user_purview`),
KEY `user_durty_record` (`user_durty_record`), KEY `user_quest_record` (`user_quest_record`),
CONSTRAINT `user_info_durty_fk` FOREIGN KEY (`user_durty_record`) REFERENCES `durty_info` (`durty_id`),
CONSTRAINT `user_info_purview_fk` FOREIGN KEY (`user_purview`) REFERENCES `user_purview` (`purview_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
18
6.2具有派生数据的表的示例
由于每次计算派生数据都要花费一定的时间和代价,为了提高性能,在数据库的某些表中,我设计了派生列,像上表book_info中的派生列book_how_many_borrowed。
6.3索引
因为添加索引会改善系统性能,所以,根据不同的情况,我引入了不同类型的索引。举例说明如下。
在列出馆中所有书时,选择排序的列为book_which_lib,非主键,此索引为聚簇索引。
在列出馆中所有管理员时,选择排序的列为user_id,主键,此索引为主索引。
但在一些表中,如lib_info表,没有建索引,因为通过课程学习我们了解到,不必为小表建立索引。
列出馆中所有图书,此操作进行较为频繁,因而为其建立二级索引。先按所在馆进行分类,再按字典序依book_isbn进行排序。
在表book_info中,因book_title 、book_author、 book_chinese_short为搜索条件,建立索引。
6.4安全机制
在本图书馆信息管理系统中,我建立了两种类型的安全机制,系统安全和数据安全。
在系统安全的建设方面,不允许以游客身份访问本系统,所有用户都必须注册并登陆,登录时会验证用户名和密码。只有两者匹配时,才可访问本系统。
在数据安全方面, 数据库对象的访问和使用有严格的控制,其中的某些表只有具有特定权限才可以访问。
七应用程序设计
7.1功能模块
7.1.1登陆模块
19
说明:该登陆界面可实现管理员、读者两种身份的登录功能,如果输入的帐号和密码及用户类型均正确,则正常登陆系统,否则显示提示信息。
20
7.2界面设计
见功能模块中的截图。
7.3事务设计
本图书馆信息管理系统中涉及到的事务,均以现实世界图书馆的日常事务为原型。其中可圈可点的几处介绍如下。
找回密码的流程在此不再重复,见7.1.1登陆模块。
书刊归还时,管理员可根据现实情况决定是否填写不良记录,若填写,该不良记录会出现在管理员界面的违章列表中,和读者界面的违章欠款中。
若读者在查询时发现馆中目前尚未有自己想借的图书,可填写预约,该预约信息会显示在管理员界面的预约列表中,管理员了解读者预约后,可进行相应处理,若已购到该书,可将预约进行标记,标记后,读者可在“查看预约”模块中看到该处理信息,这时就可去图书馆借阅该书。
除此之外,读者还可续借未还的图书。
八测试和运行
此图书馆信息管理系统在Tomcat6.0服务器进行了功能性测试。测试结果是所有功能已经实现。
此图书馆信息管理系统在IE6、IE7、Firefox2、Opera9等四款浏览器上进行了兼容性测试。测试结果是系统界面能够基本完全一致的呈现。稍有不同之处是归还书籍页面中的不良记录的自动呈现,在Netscape内核和Opera内核处有不同的表现。
除此之外,还对此图书馆信息管理系统进行了低强度的压力测试。测试结果较为理想。
九部分代码分析
9.1首页跳转代码
这里使用JSP2.0的标准表现输出标签JSTL进行跳转。这样可以最大化的将业务层和表现层的代码分离。这是JSP2.0标准的推荐使用方法。 9.2用户登录信息的显示 用户名: 31 登录时间: type=\ dateStyle=\ timeStyle=\