struts 2实现图书查询系统 .

 

完成了struts2的HelloWrold程序后稍加修改,就可以完成一个图书查询系统。

1.2.1 首先理解用Map实现的查询功能

 

  1. package com.Action;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.util.LinkedHashMap;  
  7. import java.util.Map;  
  8.   
  9. public class MapTest {  
  10.   
  11.     /** 
  12.      * @param:用map实现图书查询功能 
  13.      * @author:cheleiyan 
  14.      * @date:2010-5-14 
  15.      */  
  16.     private static Map<String, Integer> books = new LinkedHashMap<String, Integer>();  
  17.     // 在静态块中对Map对象进行初始化,Map的key值表示书名,value值表示书的价格   
  18.     static {  
  19.         books.put("java编程思想", 98);  
  20.         books.put("java核心技术", 98);  
  21.         books.put("javaweb技术大全", 87);  
  22.         books.put("JavaScript", 56);  
  23.         books.put("J2me手机编程", 45);  
  24.         books.put("嵌入式开发", 32);  
  25.         books.put("软件测试", 42);  
  26.         books.put("大学英语", 23);  
  27.     }  
  28.   
  29.     // 根据书名进行模糊查询,返回用于保存结果的Map对象   
  30.     public Map<String, Integer> getBooks(String bookName) {  
  31.         // 定义一个保存查询结果的books对象   
  32.         Map<String, Integer> resultbooks = new LinkedHashMap<String, Integer>();  
  33.         //   
  34.         for (Map.Entry<String, Integer> entry : MapTest.books.entrySet()) {  
  35.             if (entry.getKey().toLowerCase().contains(bookName.toLowerCase())) {  
  36.                 resultbooks.put(entry.getKey(), entry.getValue());  
  37.             }  
  38.         }  
  39.         return resultbooks;  
  40.     }  
  41.      //用来获得书名的方法   
  42.     public static String getbookName() throws IOException {  
  43.         InputStreamReader isr = new InputStreamReader(System.in);  
  44.         BufferedReader br = new BufferedReader(isr);  
  45.         String bookName = br.readLine();  
  46.         return bookName;  
  47.     }  
  48.   
  49.     public static void main(String[] args) throws IOException {  
  50.         // TODO Auto-generated method stub   
  51.   
  52.         MapTest maptest = new MapTest();  
  53.         while (true) {  
  54.             System.out.println("请输入查询的书名:");  
  55.             //得到用户输入的书名   
  56.             String querybookName = getbookName();  
  57.             if(querybookName.equals("")) break;  
  58.             //调用getBooks方法进行查询   
  59.             Map<String, Integer> resultbooks = maptest.getBooks(querybookName);  
  60.             //循环打出查询结果   
  61.             for (Map.Entry<String, Integer> entry : resultbooks.entrySet()) {  
  62.                 System.out.println("书名:" + entry.getKey());  
  63.                 System.out.println("价钱:" + entry.getValue());  
  64.             }  
  65.   
  66.         }  
  67.     }  
  68.   
  69. }  

1.2.2理解了以上代码,对HelloWorld程序修改就能实现图书查询,把上面代码改成数据处理类代码(BookDAO代码如下)

  1. package com.Action;  
  2. import java.util.LinkedHashMap;  
  3. import java.util.Map;  
  4. public class BookDAO {  
  5.     //保存图书信息的静态Map对象   
  6.     private static Map<String,Integer> books=new LinkedHashMap<String, Integer>();  
  7.     //在静态块中对Map对象进行初始化,Map的key值表示书名,value值表示书的价格   
  8.     static  
  9.     {  
  10.         books.put("java编程思想"98);  
  11.         books.put("java核心技术",98);  
  12.         books.put("javaweb技术大全",87);  
  13.         books.put("JavaScript",56);  
  14.         books.put("J2me手机编程",45);  
  15.         books.put("嵌入式开发",32);  
  16.         books.put("软件测试",42);  
  17.         books.put("大学英语",23);  
  18.     }  
  19.     //根据书名进行模糊查询,返回用于保存结果的Map对象   
  20.     public Map<String,Integer> getBooks(String bookName)  
  21.     {  
  22.         //定义一个保存查询结果的books对象   
  23.         Map<String,Integer> books=new LinkedHashMap<String, Integer>();  
  24.         //   
  25.         for(Map.Entry<String, Integer>entry:BookDAO.books.entrySet())  
  26.         {  
  27.             if(entry.getKey().toLowerCase().contains(bookName.toLowerCase()))  
  28.             {  
  29.                 books.put(entry.getKey(), entry.getValue());  
  30.             }  
  31.         }  
  32.         return books;  
  33.     }  
  34. }  

1.2.3编写和配置Action类 QueryAction代码如下:

  1. package com.Action;  
  2.   
  3. import java.util.Map;  
  4. //ctrl+shift+m可以导入包   
  5. public class QueryAction {  
  6.     private String bookName;  
  7.     private Map<String,Integer>result;  
  8.     //bookName的get方法   
  9.     public String getBookName() {  
  10.         return bookName;  
  11.     }  
  12.     //bookName的set方法   
  13.     public void setBookName(String bookName) {  
  14.         this.bookName = bookName;  
  15.     }  
  16.     //bookName的get方法   
  17.     public Map<String, Integer> getResult() {  
  18.         return result;  
  19.     }  
  20.     //bookName的set方法   
  21.     public void setResult(Map<String, Integer> result) {  
  22.         this.result = result;  
  23.     }  
  24.     //   
  25.     public String execute()  
  26.     {  
  27.         BookDAO book=new BookDAO();  
  28.         Map<String,Integer> books=book.getBooks(bookName);  
  29.         setResult(books);  
  30.         return "result";  
  31.     }  
  32.   
  33. }  

 1.2.4编写输入查询信息querybooks.jsp显示查询结果的result.jsp页面

querybooks.jsp代码

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'querybooks.jsp' starting page</title>  
  13.       
  14.     <meta http-equiv="pragma" content="no-cache">  
  15.     <meta http-equiv="cache-control" content="no-cache">  
  16.     <meta http-equiv="expires" content="0">      
  17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  18.     <meta http-equiv="description" content="This is my page">  
  19.     <!--  
  20.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">  
  21.     -->  
  22.   
  23.   </head>  
  24.     
  25.   <body>  
  26.   <form action="query" method="POST">  
  27.     书名<input type="text" name="bookName">  
  28.     <input type="submit" value="查询">  
  29.     </form>  
  30.   </body>  
  31. </html>  

result.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'result.jsp' starting page</title>  
  13.       
  14.     <meta http-equiv="pragma" content="no-cache">  
  15.     <meta http-equiv="cache-control" content="no-cache">  
  16.     <meta http-equiv="expires" content="0">      
  17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  18.     <meta http-equiv="description" content="This is my page">  
  19.     <!--  
  20.     <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">  
  21.     -->  
  22.   
  23.   </head>  
  24.     
  25.   <body>  
  26.   <h1>查询结果</h1>  
  27.   <table border=1>  
  28.         <tr>  
  29.         <td>书名</td>  
  30.         <td>价格</td>  
  31.         </tr>  
  32.         <%  
  33.           Map<String,Integer> result=(Map<String,Integer>)request.getAttribute("result");  
  34.           for(Map.Entry<String,Integer> entry: result.entrySet())  
  35.           {  
  36.              
  37.           %>  
  38.           <tr>  
  39.           <td><%=entry.getKey() %></td>  
  40.           <td><%=entry.getValue() %></td>  
  41.           </tr>  
  42.           <%  
  43.           }  
  44.          %>  
  45.          </table>  
  46.   </body>  
  47. </html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
一.功能简介 1. 实现一个图书管理系统图书信息存放到一个数据库中。图书包含信息:图书号、图书名、作者、价格、备注字段。 2. 系统实现如下的基本管理功能: (1)用户分为两类:系统管理员,一般用户。 (2)提供用户注册和用户登录验证功能;其中登录用户的信息有:登录用户名,登录密码等。 (3)管理员可以实现对注册用户的管理(删除),并实现图书的创建、查询、修改和删除等有关的操作。 (4)一般用户,只能查询图书,并进行借书、还书操作,每个用户最多借阅8本,即当目前借书已经是8本,则不能再借书了,只有还书后,才可以再借阅。 二.涉及技术 Struts2框架、MySQL数据库、C3P0数据池、Jsp、HTML、CSS、JavaScript等技术。 三.设计思路 1. 基于Struts2框架进行编程设计,连接MySQL数据库实现数据的增删查改,应用Jsp、HTML、CSS、JavaScript对访问页面进行编写和美化。 2. 分别创建book表和user表,用以存放图书信息和用户数据。其中user表中,设有flag以区分管理员和普通用户。 3. 分别创建Book类和User类,与数据表相对应。每本书和每个用户都有唯一的id与之对应。 4. 创建C3P0属性文件和数据库连接工具类。 5. 设计数据库操作类:UserDao类和BookDao类。UserDao用于实现所有对user表的操作,BookDao用于实现所有对book表的操作。 6. 创建分别对应UserDao类和BookDao类的Action:UserAction和BookAction。采用基于注解的方式进行Action配置。 7. 用户账号分为管理员账号和普通用户账号,注册时加以区分,登录时即可自动判断进入对应的操作主页面。 8. 管理员可实现对用户的查询显示,模糊查询,删除,批量删除,全选和取消全选等功能;可实现图书查询显示,模糊查询,添加,删除,批量删除,全选和取消全选等功能。 9. 普通用户可实现借书和还书功能,借书功能通过对book表的查询,将未借出的图书按照id顺序排列显示,点击表格后方的“借阅”按钮,进行确认借阅,将book表中本书的borrowperson列的值改为本用户账号。对于借阅成功的图书可以在“当前借阅”中进行查看。还书功能通过在“当前借阅”中点击“还书”按钮,进行确认还书,将book表中本书的borrowperson列的值改为“空”,本书信息将可以在“借书”界面查看。 四.存在的问题 1. 原本希望能为每一个用户创建一个对应的以其账号命名的数据表,用以存放用户所借图书信息,但创建表的SQL语句无法在java代码中执行,所以只好在book表中添加一列borrowperson,用来存放借阅本书的用户账号,这样查询用户当前借阅记录时,以“where borrowperson=‘account’”为条件对book表进行查询即可。但是每个用户要当前查询借阅记录时都需要对整个book表进行遍历,效率太低。 2. 模糊查询时,因同时需要进行where筛选,SQL语句无法执行,只好分开查询,先进行模糊查询查询结果存放到list表中,再通过遍历list表进行判断是否符合where的条件,若符合,则存入另一个list表中。这种方法虽然实现查询,但效率太低,代码过于繁重。 五.改进预想 这些本不应该是预想,原本希望在本次作业中实现的,但时间不够充分,只能作为下一步的改建预想。 1. 希望实现登录时验证码验证登录; 2. 希望实现查询时,查询结果分页浏览; 3. 进一步优化Action之间的传值方法; 4. 页面进一步优化、美化; 5. 实现用户借书还书时间记录,和借阅时长限制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值