其他紧张模块的定义
页面
浸染
Login.jsp
登录,考验用户名是否为空,Ajax网页的异步刷新
Do.jsp
验证账号密码是否和数据库相同,显示缺点信心
Index.jsp
指引页面
Customer.java
用户的用户名,密码
CustomerDao.java
链接数据库 ,得到数据库里用户的密码
EncodingFilter.java
笔墨过滤器
ValidateServlet.Java
检讨验证码是否精确
validateMix.jsp
验证码天生页面
ftz.java。
该页面用于防止用户绕过登录直接跳转到其他页面进行操作
素材的创作与编辑
网站图片来源:wps画报,百度,web实验,表情包图片
音乐:酷狗音乐下载,通过audacity剪辑个中部分
开拓环境及利用技能开拓环境搭建
Myeclipse2018和mysql和navicat for mysql(可视化mysql工具)
运行工具
2345加速浏览器(IE模式 超速模式) chrome浏览器均可运行
利用紧张技能
前端采取HTML+CSS+JavaScript+bootsrap实现。javaScript技能:表单验证关键字,滚动字幕 逐字显示(index2.jsp),显示日期韶光JavaScript HTML DOM 事宜(collection.jsp index.jsp等)
Boostrap实现相应式布局
(2)作品后端哀求采取JSP、JavaBean、Servlet以及数据库等技能实现
JSP内置工具:本网站紧张利用了 request, response, session三个。request紧张用来获取用户输入的基本信息以及详细页面进行的操作中须要的数据。利用response来进行重定向,以及实现目的页面跳转用法为 response.setHeader("refresh","刷新韶光间隔;目的页面地址");
验证码技能的利用:避免重复登录。是做事器随机产生验证码字符串,保存在session中,并写入图片,将图片连同表单发给客户端。用户输入账号密码验证码,将获取的验证码与随机产生的验证码进行比较,相同则连续进行,不同将缺点信息返回客户端,避免程序的连续运行。
JavaBean:将用户登录的信息封装在JavaBean中,在须要时从JavaBean中读出。DAO本次紧张用CustomerDao.java链接数据库 ,得到数据库里用户的密码
servlet这里紧张用的是doGet()和doPost()。本实例紧张用来验证验证码是否准确。以及利用Filter来办理常常会涌现中文乱码情形。ftz.java:该页面用于防止用户绕过登录直接跳转到其他页面进行操作。该页面紧张用了Filter过滤器来实现防止跳转的功能。该过滤器进行跳转页面之提高行判断是否有用户名,若有用户名则代表用户进行登录操作,过滤器放行;若用户名为NULL,则过滤器不放行,直接跳转到登录页面。
Ajax用于网页的异步刷新和只刷新网页的一小部分,可以带来更好的用户体验,减轻做事器包袱,
MYSQL数据库:用JDBC将JAVAWEB和数据库连接,在数据库中创建一个用户登录信息表来判断是否存在该登任命户以及实现用户注册功能。
功能实现数据库设计 用户密码表和留言信息表
目录
1.序言 3
实验目的 3实验的基本哀求 ..3系统剖析与设计 ..3系统功能描述(大略需求剖析) ..3系统功能流程 ..3数据库设计 4数据表的构建 ..43.系统的实现与测试 ..5
系统采取的关键技能 ..5关键程序流程 ..6关键代码剖析 ..7涌现的问题及办理 ..18向数据库中插入数据涌现乱码以及界面显示有中文乱码问题: 18弹出提示框问题 ..19系统界面 19进入系统界面 (登录界面) ..19管理员模块界面: ..19添加图书界面: ..20罚金设置界面: ..20用户管理界面: ..20用户模块界面: ..21图书检索、借阅界面: ..21续借图书界面: ..22归还界面: ..22安全退出界面: ..235.操作方法 23
登录 23图书检索,借阅 ..23图书归还,续借 ..23图书,用户的添加 ..23图书,用户的删除操作 ..24图书,用户的更新操作 ..246.剖析与总结 24
实验剖析与总结 ..24附录: 257.1 参考文献: ..25
MVC 架构模式的认识 ..25/ 27南昌大学软件学院 java web 大作业 实验报告
1.序言
实验目的学习 Web运用程序的开拓,以 B/S办法, JSP编程技能开拓图书管理系统;通过编程实践节制 JSP的动态网页与 sql2012 数据库相结合的技能;通过 MVC(模型 -视图-掌握 )架构模式,使其在开拓过程中得以运用,并理解 Web 编程模式下的 Model1 和 Model2 的差异;理解 Struts 框架的详细含义及在 Struts 模式下的开拓。实验的基本哀求数据库表不少于 3 个,且表之间必须存在关联。页面设计布局合理,颜色利用恰当,风格统一,页面应不少于 10 个。系统功能不少于 6 个,且能精确运行。系统采取面向工具的办法设计,只管即便使界面、业务、数据之间的耦合关系降落。代码实现只管即便利用事宜处理、事务处理。系统应对一些常见的非常进行适当的处理。数据的操作以事务的办法实现,哀求处理并发问题。系统剖析与设计系统功能描述(大略需求剖析)图书管理系统是范例的信息管理系统 (MIS),本系统是根据当代化校园的发展而设计的基于 jsp的图书管理系统,本系统便是为了管理好图书信息和借阅等一系列操作而设计的。图书管理系统须要知足来自两方面的需求, 这三个方面分别是学生和管理员。 学生的需求是查询图书馆的藏书,借阅图书,和退换图书等功能;管理员的功能最为繁芜,包括对学生、图书进行管理,及系统状态的查看、掩护并。学生要利用图书管理系统,须要进行上岸,上岸之后则可以进行一系列的操作,例如:查询图书,借阅图书,归还图书等功能。而作为管理员,则可以对学生进行添加,只有已添加有卡号的学生才可以进行图书管理系统的上岸,管理员还可以对图书进行增,删,改,查。亦可以对用户进行增,删,改查等功能。系统功能流程为了知足以上的需求,系统分成了两大模块,普通用户模块和管理员模块。
/ 27南昌大学软件学院 java web 大作业 实验报告
功能模块图如图所示。
相应 Struts 页面流程如下所示(电子版可自行放大) :
数据库设计数据表的构建本系统采取如下的数据表:
用户信息表 users:用于记录用户信息数据表
/ 27南昌大学软件学院 java web 大作业 实验报告
字段名 类型 长度 是否为主键 可否为空 解释
ID nchar 10 是 否 用户 ID
username nchar 10 否 否 用户姓名
password nchar 10
cardnum int 10
否 否 用户密码
否 否 卡号信息
userlevel int 10 否 否 用户级别
coater int 10 否 否 借阅限额
borrowed int 10 否 否 已借阅数
can_borrow int 10 否 否 可借阅数
图书信息表 books: (用于存储图书干系信息 )
字段名 类型 长度 是否为主键 可否为空 解释
b_ID int 10 是 否 图书 ID
b_name nvarchar 50 否 否 图书名称
b_author nchar 10 否 否 图书作者
b_publish nvarchar 50 否 否 图书出版社
b_type nchar 10 否 否 图书类型
b_count int 10
b_hot int 10
借阅表 borrowbook: ( 用于表示借阅信息 )
否 否 拥有数量
否 否 欢迎度
字段名 类型 长度 是否为主键 可否为空 解释
brid int 10 是 否 借阅表 id
cardnum int 10 是 否 用户表外键
b_ID int 10 是 否 图书表外键
borrowday nchar 10 否 否 借阅日期
shouldreturn nchar 10 否 否 应还日期
罚金表 fine: (用于设置罚金 )
字段名 类型 长度 是否为主键 可否为空 解释
fine float 10 是 否 罚金
3.系统的实现与测试
3.1 系统采取的关键技能
本系统采取的是 Model2 模型,Model2 表示的是基于 MVC模式的框架。MVC是 Model-View
-Controller 的简写。 "Model" 代表的是运用的业务逻辑(通过 JavaBean,), "View" 是应
用的表示面(由 JSP页面产生) ,"Controller" 是供应运用的处理过程掌握(一样平常是一个
Servlet),通过这种设计模型把运用逻辑,处理过程和显示逻辑分身分歧的组件实现。这些
组件可以进行交互和重用。从而填补了 Model1 的不敷。
/ 27南昌大学软件学院 java web 大作业 实验报告
Model2 具有组件化的优点从而更易于实现对大规模系统的开拓和管理, 但是开拓 MVC系统
比大略的 JSP开拓要繁芜许多, 它须要更多的韶光学习和节制。 同时新东西的引入会带来新
的问题(这让我想起来关于 "自动打算 "的一篇文章,中间提到为了降落系统的繁芜度,却导
致更高的繁芜度) 。必须基于 MVC组件的办法重新思考和设计运用构造。 原来通过建立一个
大略的 JSP页面就能实现的运用现在变成了多个步骤的设计和实现过程。 所有的页面和组
件必须在 MVC 框架中实现,以是必须进行附加地开拓事情。 MVC 本身便是一个非常繁芜
的系统,以是采取 MVC 实现 Web 运用时,最好选一个现成的 MVC框架,在此之下进行开
发,从而取得事半功倍的效果。现在有很多可供给用的 MVC 框架,由于 Struts 有完全的文
档并且相对来讲比较大略,以是用它开拓 MVC 系统还是比较方便地。
3.2 关键程序流程
本实验的总体流程如下:
本系统运用 3 层架构模型,现分别对其进行阐述:
第一层架构为数据库层,也是程序的最底层 (紧张由 DataBase.java 实现 ),它的功能实现
sql2012 数据库的连接,函数里封装了几个操作。
public boolean query(String s) ( 用于查询数据表操作 );
public ResultSet getlist(String s) (用于获取数据的可以滚动结果集 ) ;
public int update(String s) (用于大略的数据更新操作)
public boolean executebatch(String a[]) (批处理,用于处理多条 sql);
第二层为 JavaBean层和 DAO层,紧张实现对数据表的信息及对其进行操作的信息进行封装
(紧张 由文 件 Books.java、 Fine.java、 borrowbook.java 、 Users.java、BookService.java 、borrowbookSevice.java、FineService.java 和 UserService.java 来实现的)。在相应的 JavaBean
层封装了所有数据表的信息,在上述的实体类中 (Books.java、Fine.java、borrowbook.java 、
Users.java)仅包含对属性的 set和 get 方法,在相应的 DAO层紧张包含对数据表的干系操作,
如得到该数据表的全部信息或部分信息,增加、删除、修正、查询相应的数据表;
第三层为业务逻辑层, 紧张由 Struts 和其的 action 来实现, 实现页面的掌握和跳转到相应的
jsp 页面,个中 action 紧张包括 BooksAction.java、LoginAction.java、ResetfineAction.java、UserAction.java。
/ 27南昌大学软件学院 java web 大作业 实验报告
相应的程序架构如图所示:
关键代码剖析数据库的连接和干系一些操作函数 (在文件 DataBase.java中实现的 ):
package com.wk.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DataBase {
private Connection conn = null;
private Statement stmt;
ResultSet rs = null;
// 数据库的 url
/ 27南昌大学软件学院 java web 大作业 实验报告
private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=Book";
// 数据库的用户名密码
String user = "sa";
String pass = "123";
// 用于验证查询操作
public boolean query(String s) throws SQLException{
try{
// 加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundException e){
System.out.println("加载驱动器类时非常 ");
}
try{
// 创建链接
conn = DriverManager.getConnection(url, user, pass); stmt = conn.createStatement();
rs = stmt.executeQuery(s);
}catch(SQLException e){
System.out.println("query 连接数据库的过程中涌现 SQL非常 <br>");
}
return(rs.next());
}
// 用于结果集可滚动的操作
public ResultSet getlist(String s) throws SQLException{
try{
/ 27南昌大学软件学院 java web 大作业 实验报告// 加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundException e){System.out.println("加载驱动器类时非常 ");}try{// 建立连接conn = DriverManager.getConnection(url, user, pass);// 得到 statement 工具stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);// 得到一个可滚动但不可以更新的结果集 rsrs = stmt.executeQuery(s);}catch(SQLException e){System.out.println("更新操作连接数据库的过程中涌现 SQL非常<br>");}return rs;}// 用于对数据库的更新public int update(String s) throws SQLException{int msg=0;try{// 加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundException e){System.out.println("加载驱动器类时非常 ");
/ 27南昌大学软件学院 java web 大作业 实验报告}try{// 创建链接conn = DriverManager.getConnection(url, user, pass); stmt = conn.createStatement();msg = stmt.executeUpdate(s);}catch(SQLException e){System.out.println("连接数据库的过程中涌现 SQL非常 <br>");}return(msg);}// 批处理,用于处理多条 sqlpublic boolean executebatch(String a[]){try {// 创建链接conn = DriverManager.getConnection(url, user, pass); conn.setAutoCommit(false);//关闭自动提交,进行事物处理 stmt = conn.createStatement();for(int i=0;i<a.length;i++){stmt.addBatch(a[i]);}int [] number = stmt.executeBatch();// 开始批处理,返回被实行的 sql 语句的序号conn.commit();System.out.println("共有 "+number.length+"条 sql语句被实行 "); stmt.clearBatch();//清空 batchconn.close();return true;
/ 27南昌大学软件学院 java web 大作业 实验报告} catch (SQLException e) {// TODO Auto-generated catch block try {conn.rollback();return false;} catch (SQLException e1) {// TODO Auto-generated catch block e1.printStackTrace();}e.printStackTrace();}return false;}// 关闭数据流public void close() throws SQLException{conn.close();stmt.close();rs.close();}}管理员操浸染户 (在文件 UserService.java 中实现的 )// 管理员对用户的添加操作public boolean adduser(String a[]) throws SQLException{// 将密码明文转换为密文存入数据库a[2] = ead.encrypt(a[2]);// 利用字符串的拼接组成 sql语句
/ 27南昌大学软件学院 java web 大作业 实验报告sql = "insert into usersvalues('"+a[0]+"','"+a[1]+"','"+a[2]+"',"+a[3]+","+a[4]+","+a[5]+","+a[6]+")";System.out.println("添加的 sql"+sql);// 调用数据库的更新数据的操作函数int result = db.update(sql);if(result!=0)return true;return false;}// 管理员对用户的删除操作public boolean deluser(String id) throws SQLException{sql = "delete from users where ID='"+id+"'";System.out.println("del sql="+sql);int result = db.update(sql);if(result!=0)return true;return false;}// 管理员对用户的更新操作public boolean updateusers(String a[]) throws SQLException{sql = "update users set username='"+a[1]+"',userlevel="+a[2]+" where ID='"+a[0]+"'";System.out.println("更新 sql="+sql);int result = db.update(sql);if(result!=0)return true;return false;}这里管理员对图书的操作和对用户的操作很类似,这里就不再赘述了。用户对图书的查询,借阅和续借和归还 (紧张在 BooksService.java 和borrowbookService.java 实现的)BooksService.java 部分代码:/ /模糊查询,获取用户的关键词,以此为查询条件进行搜索,默认按人气高至低排列public ArrayList getbook(String a[]) throws SQLException{ArrayList al = new ArrayList();
/ 27南昌大学软件学院 java web 大作业 实验报告for(int i=0;i<a.length;i++){System.out.println(a[i]);}if(a[0].equals("")){sql = "select from books where "+a[2]+" LIKE '%"+a[1]+"%' order by b_hot desc";}else{sql = "select from books where "+a[2]+" LIKE '%"+a[0]+"%' order by b_hot desc";}System.out.println("sql:"+sql);// 调用 DataBase.java的函数,获取相应的图书列表rs = db.getlist(sql);while (rs.next()) {Books bk = new Books();bk.setB_ID(rs.getInt(1)); bk.setB_name(rs.getString(2));bk.setB_author(rs.getString(3));bk.setB_publish(rs.getString(4));bk.setB_type(rs.getString(5)); bk.setB_count(rs.getInt(6));bk.setB_hot(rs.getInt(7));al.add(bk); // 将al放到 arrayList中}return al;}borrowbookService.java 部分代码:// 归还图书,public boolean returnbook(String brid,String cardnum,String b_ID) throws SQLException{String sql1 = "update users set borrowed = borrowed-1 , can_borrow =can_borrow+1 where cardnum = "+cardnum;String sql2 = "update books set b_count = b_count+1 where b_ID="+b_ID;String sql3 = "delete from borrowbook where brid="+brid; String a[] = {sql1,sql2,sql3};// 处理多条语句时,利用事务处理和利用批处理进行处理。if(db.executebatch(a))return true;return false;}// 续借图书
/ 27南昌大学软件学院 java web 大作业 实验报告public boolean renewbook(String brid) throws SQLException{// 将当前韶光得到,拼接之 sql,进行数据库表的更新操作sql = "update borrowbook set borrowday ='"+newDay().getnowdate()+"',shouldreturn = '"+new Day().getdate()+"' where brid="+brid;System.out.println("sql="+sql);int r = db.update(sql);if(r!=0){return true;}return false;}管理员对罚金的设置(紧张由 FineService.java和Resetfine.java完成的)FineService.java代码:package com.wk.service;import java.sql.ResultSet;import java.sql.SQLException;import com.wk.util.DataBase;public class FineService {DataBase db = new DataBase();ResultSet rs = null;String sql = "";// 管理员设定罚金金额public boolean setfine(float f){// 字符拼接将设置的金额拼接成 sqlsql = "update fine set fine ="+f; System.out.println(sql);try {// 调用 database.java的更新函数进行数据库操作int r = db.update(sql);if(r!=0){System.out.println("设置罚金成功!
"); return true;}else{System.out.println("设置罚金失落败!
");}} catch (SQLException e) {// TODO Auto-generated catch block e.printStackTrace();}
return false;}// 获取上一次设定的罚金金额public float getlastfine(){float m = 0;sql = "select fine from fine";try {// 获取当前设定的金额rs = db.getlist(sql);while(rs.next()){m = rs.getFloat(1);}} catch (SQLException e) {// TODO Auto-generated catch block e.printStackTrace();}return m;}}Resetfine.java部分代码:// 设置罚金if("y".equals(isfirst)){f.setFine(fs.getlastfine()); request.setAttribute("oldfine", f.getFine());return mapping.findForward("success");}else{f.setFine(fs.getlastfine()); System.out.println("oldfine="+f.getFine());request.setAttribute("oldfine", f.getFine());// 获取表单输入的罚金金额,转为 float类型fs.setfine(Float.parseFloat(fineForm.getFine()));f.setFine(fs.getlastfine());System.out.println("newfine="+f.getFine()); request.setAttribute("newfine", f.getFine());// 跳转至成功界面return mapping.findForward("success");}
/ 27南昌大学软件学院 java web 大作业 实验报告赞助工具包(实现用户密码的加密和韶光的打算转换问题)Day.java/ 换算韶光 打算两个日期之间相差的天数 打算一个日期在 n天之后的日期字符串/package com.wk.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class Day {// 传入两个韶光字符串,打算个中相差的天数public int getlaterday(String d1,String d2) throws ParseException{Date a = new SimpleDateFormat("yyyy-MM-dd").parse(d1); Date b = new SimpleDateFormat("yyyy-MM-dd").parse(d2);// 获取相减后天数long day = (a.getTime()-b.getTime())/(2460601000);System.out.println(day+"");return (int) day;}// 获取两个月后韶光字符串public String getdate(){SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");// 字符串转换Calendar c = Calendar.getInstance();//new Date().getTime(); 这个是获得当前电脑的韶光,你也可以换成一个 随意的韶光c.setTimeInMillis(new Date().getTime());c.add(Calendar.DATE, 60);//天后的日期Date date= new Date(c.getTimeInMillis()); // 将c转换成 DateSystem.out.println("date="+formatDate.format(date)); return formatDate.format(date);}// 获取当前的韶光
/ 27南昌大学软件学院 java web 大作业 实验报告public String getnowdate(){Date dt=new Date();SimpleDateFormat matter1=new SimpleDateFormat("yyyy-MM-dd");System.out.println(matter1.format(dt)); return matter1.format(dt);}}EncryptAndDecrypt.javapackage com.wk.util;public class EncryptAndDecrypt {/ 加密String明文输入 ,String密文输出 @param @return/public String encrypt(String sourceString){char [] p = "图书管理 ".toCharArray();int n = p.length;char [] c = sourceString.toCharArray();int m = c.length;for(int k = 0;k<m;k++){int mima = c[k]+p[k%n];c[k] = (char)mima;//加密}return new String (c);//返回密文}/ 输入加密后的 String,返回原来的 String @param @return/public String decrypt(String sourceString){char [] p = "图书管理 ".toCharArray();int n = p.length;
/ 27南昌大学软件学院 java web 大作业 实验报告
char [] c = sourceString.toCharArray();
int m = c.length;
for(int k = 0;k<m;k++){
int mima = c[k]-p[k%n];
c[k] = (char)mima;//解密
}
return new String (c);//返回明文
}
}
涌现的问题及办理向数据库中插入数据涌现乱码以及界面显示有中文乱码问题:
问题描述: 当须要将数据插入数据库时, 会创造插入的数据有乱码。 在界面的表单进行数据输入时,传出传入的中文数据也会涌现乱码。
1、JSP显示中文乱码的问题,一样平常都是没有设置页面编码,把稳添加以下这样一段代码
<%@ page pageEncoding= ”-U8TF%>
”
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
"pageEncoding"指定了当前 jsp文件存储利用的编码办法, “contentType用来”指定相应头
中的 "Content-Type"
当做事真个相应头中没有指定 charset 时,客户端会依据上面代码中的 charset 指定的编
码办法解码页面。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
并且 JSP都以 UTF-8的编码办法保存, 把所有可能涌现的问题通通抹杀。 http://www.linuxidc.com 如
果你利用 Myeclipse,可以设置 Myeclipse 的默认参数,使 Myeclipse 新建 JSP文件时,可以
自 动 是 用 UTF-8 的 编 码 方 式 。 方 法 : Windows-Preference-Myeclipse-File and
Editor-JSP-Encoding,选择 ISO 10646/Unicode(UTF-8)。
2、从表单获取的数据有中文乱码,在 Struts 里面,一样平常都利用过滤器进行数据的过滤,保
证数据的编码格式与你自己页面设置的同等。关键代码如下:
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
// 这里设置接管编码
arg0.setCharacterEncoding("utf-8");
// 连续让它提高,这句话必须要有
arg2.doFilter(arg0, arg1);
}
值得一提的是, arg0.doFilter(arg0,arg1); 这句话一定要有, 不然过滤器不会向前实行, 会停滞 不前,这样程序就没法运行了!
3、读取数据时,在 Servlet 中添加 request.setCharacterEncoding("UTF-8"); 可以很好地办理从JSP页面接管中文参数乱码。
弹出提示框问题问题描述:由于对 Struts 还不是完备的熟习,对付其该若何利用弹出框还是有点困扰,其不能再 action 里弹出一个弹出框后再进行 return mapping 的操作,这样写并不会有提示框,而是直接实行了 return mapping 语句。办理方法:利用 servlet 和 jsp结合来弹出提示框,即在 servlet 里给 jsp 通报一个参数,然后在 jsp 里进行该参数的判断,然后根据判断结果看是否弹出提示框,由于在 jsp 里可以直接写 js代码,这样弹出框会方便很多,只要用 alert(“我是弹出框!”);这一句就可以了。系统界面进入系统界面 (登录界面)管理员模块界面:/ 27
南昌大学软件学院 java web 大作业 实验报告
添加图书界面:罚金设置界面:用户管理界面:/ 27
南昌大学软件学院 java web 大作业 实验报告
用户模块界面:图书检索、借阅界面:/ 27
南昌大学软件学院 java web 大作业 实验报告
续借图书界面:归还界面:/ 27
南昌大学软件学院 java web 大作业 实验报告
4.9 安全退出界面:
5.操作方法
登录首先,输入精确网址即可打开系统登录界面,输入精确账号密码,系统会根据账号的级别,相应的进入不同的操作界面。图书检索,借阅登录成功,点击左侧导航栏的检索、 借阅,即可进入相应界面。 输入关键词,或选择种别,点击搜索,会涌现相应内容。图书归还,续借登录成功后,点击左侧相应的归还或续借菜单,即可进入干系界面,点击归还或续借按钮即可完成操作。
图书,用户的添加管理员界面,点击左侧菜单的添加用户和添加图书,输入干系信息,点击添加即可。
/ 27南昌大学软件学院 java web 大作业 实验报告
图书,用户的删除操作管理员界面,点击左侧菜单的删除用户和删除图书,找到想要删除的用户或图书,当然也可以通过 id 号或卡号进行搜索,然后进行操作。图书,用户的更新操作
管理员界面,点击左侧菜单的更新用户和更新图书,找到想要更新的用户或
图书,当然也可以通过 id 号或卡号进行搜索,然后在该用户的这一条记录的相
应位置填写修正后的数据(当然有些字段是不能修正的) ,点击更新按钮即可。
6.剖析与总结
实验剖析与总结在这一节中,我紧张谈论了两个问题,一个是系统的联机文档,另一个是系
统的测试,下面我们分别加以解释。 作为一个完全的系统, 联机文档是个中不可
短缺的部分也是相称主要的部分。 好的文档能够利用户快速理解并准确的利用系
统的各项功能。 减少误操作, 减少缺点产生的可能, 这对用户和开拓职员都有很多的好处。以是在开拓本系统中, 也加入了不少的文档, 除了对付几大模块的详细解释外,对付易出错和不易操作的地方 (如多条件查询部分) 又作了详细的解释。
由于本身能力的局限性,以是做编写的代码,纵然经由反复检讨也难免出错
以是在本阶段力求利用有限的韶光找出尽可能多的缺点, 力求系统只管即便精确。 我们在本系统的测试中利用了黑盒法 (即不关心程序内部的逻辑构造, 而是根据程序的功能来设计是检测) 请一位不熟习本系统的人来进行随意性的操作, 冲破习
惯的操作顺序,从中创造缺点,在此阶段系统的大量缺点得到了改正 .
信息管理系统所涉及的数据库设计的主要步骤加载测试。 加载测试事情贯穿于程序测试事情的全过程,全体录入、修正、查询、处理事情均可视为对数据库
的加载测试事情。 要设计出一个好的信息管理系统数据库, 除知足系统所哀求的
功能外,还必须遵守下列原则: 1)基本表的个数越少越好。 2) 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越大略。 3)字段的个数越
少越好。 4) 所有基本表的设计均应只管即便符合第三范式。数据库的设计中,如何
处理多对多的关系和如何设计主键, 是两个有着较大难度、须要重点考虑的问题。
末了,希望自己在往后的空闲韶光,能将该系统逐渐完美,将 bugs一个一
个的肃清,将界面重新设计,使其符合当代的审美潮流。
/ 27南昌大学软件学院 java web 大作业 实验报告
附录:
7.1 参考文献:
[1]JSP 编程技巧 /清宏打算机事情室编著 . 北京:机器工业出版社, 2001.1
[2]JAVA EE工程实训教程 /朱俊炎,吴英培编著 .天津科学技能出版社 ., 2010.2 [3] 深入 JAVA Servlet 网络编程 . 清华大学出版社
[4]Struts 开拓入门与项目实践 . 北京:公民邮电出版社 , 2005.8
[5]J2EE 运用开拓实例精解 . 清华大学出版社
7.3 MVC架构模式的认识
模型 -视图 -掌握器( MVC )是 80 年代 Smalltalk-80 涌现的一种软件设计模式,现在已经被
广泛的利用。
1、模型( Model)
模型是运用程序的主体部分。模型表示业务数据,或者业务逻辑 .
2、视图( View )
视图是运用程序中用户界面干系的部分,是用户看到并与之交互的界面。
3、掌握器( controller)
掌握器事情便是根据用户的输入,掌握用户界面数据显示和更新 model 工具状态。
/ 27南昌大学软件学院 java web 大作业 实验报告MVC 式的涌现不仅实现了功能模块和显示模块的分离, 同时它还提高了运用系统的可掩护性、可扩展性、可移植性和组件的可复用性早期的程序中, 如果不把稳对数功能和显示的解耦合, 常常会导致程序的繁芜及难以掩护。很多 VB,Delphi 等 RAD 程序都有这种问题。乃至现在的 C#,Java 有时候也会涌现把业务逻辑写在显示模块中的征象管 MVC 设计模式很早就提出, 但在 Web 项目的开拓中引入 MVC 却是步履维艰。 紧张缘故原由:一是在早期的 Web 项目的开拓中,程序措辞和 HTML 的分离一贯难以实现。 CGI 程序以字符串输出的形式动态地天生 HTML 内容。后来随着脚本措辞的涌现,前面的办法又被倒了过来,改成将脚本措辞书写的程序嵌入在 HTML 内容中。这两种办法有一个相同的不敷之处即它们总是无法将程序措辞和 HTML 分离。二是脚本措辞的功能相对较弱,缺少支持 MVC 设计模式的一些必要的技能根本。 直到基于 J2EE 的 JSP Model 2 问世时才得以改不雅观。 它用 JSP 技能实现视图的功能, 用 Servlet 技能实现掌握器的功能, 用 JavaBean 技能实现模型的功能JSP Model 1 与 JSP Model 2SUN 在 JSP 涌现早期制订了两种规范, 称为 Model1 和 Model2 。虽然 Model2 在一定程度上实现了 MVC ,但是它的运用用并不尽如人意JSP Model 1JSP Model 2
/ 27南昌大学软件学院 java web 大作业 实验报告model2 随意马虎使系统涌现多个 Controller ,并且对页面导航的处理比较繁芜有些人以为 model2 仍不足好,于是 Craig R. McClanahan 2000 年 5 月 提交了一个WEB framework 给 Java Community. 这便是后来的 Struts.2001 年 7 月, Struts1.0 ,正式发布。该项目也成为了 Apache Jakarta 的子项目之一Struts 质上便是在 Model2 的根本上实现的一个 MVC 架构。它只有一个中央掌握器, 他采取 XML 定制转向的 URL。采取 Action 来处理逻辑。