续借图书功能实现---图书馆客户端

在上一篇 获取个人借阅信息---图书馆客户端 已经得到了个人借阅的信息,图书馆对已经借阅的图书还提供了续借的功能。

实现续借功能也不复杂,在上一篇解析个人借阅信息时,添加两个字段即可。即修改getLendBookInfos(String lendInfoHtml)方法。

代码:

/**
	 * 获取借阅的数目信息
	 * 
	 * @param lendInfoHtml
	 *            借阅信息详情html
	 * @return 借阅信息列表
	 */
	public static List<LendBookInfo> getLendBookInfos(String lendInfoHtml) {

		List<LendBookInfo> lendBookInfos = new ArrayList<>();
		Document document = Jsoup.parse(lendInfoHtml);
		Element table = document.getElementsByClass("patFunc").get(0);// 表格
		Elements items = table.getElementsByClass("patFuncEntry");// 数目信息集合
		for (Element item : items) {

			LendBookInfo bookInfo = null;

			Element ele_mark = item.getElementsByClass("patFuncMark").get(0);// 单选框
			Element ele_input = ele_mark.child(0);
			// 续借的实现依赖一下两个字段
			String markName = ele_input.attr("id");// eg:renow1
			String markValue = ele_input.attr("value");// eg:i4230433

			Element ele_title = item.getElementsByClass("patFuncTitle").get(0);// 题名
			String bookDetail = ele_title.child(0).text();

			Element ele_barCode = item.getElementsByClass("patFuncBarcode")
					.get(0);// 条形码
			String barCode = ele_barCode.text();

			Element ele_status = item.getElementsByClass("patFuncStatus")
					.get(0);// 状态
			String status = ele_status.text();

			Element ele_callNumber = item.getElementsByClass("patFuncCallNo")
					.get(0);// 索书号
			String callNumber = ele_callNumber.text();

			bookInfo = new LendBookInfo(bookDetail, callNumber, status,
					barCode, markName, markValue);
			lendBookInfos.add(bookInfo);
		}
		return lendBookInfos;

	}

接着,点击续借,就是又发送了一次post请求,请求体:


此次请求没有真正的执行续借,而是提示你是否确定要续借。



点击是,查看真正的请求,请求体:



响应结果为:



下面进行编码,模拟post请求,只需模拟真正实现续借的那次请求即可(renewsome : 是),代码:

	/**
	 * 续借图书的post请求.(同样必须在login()调用之后)
	 * 
	 * @param lendBookInfo
	 *            要续借的图书条目
	 * 
	 * @return 借阅图书信息的html
	 */
	public static String renewBook(LendBookInfo lendBookInfo) {

		String renewBookHtml = null;
		String renew_key = lendBookInfo.getMarkName();
		String renew_value = lendBookInfo.getMarkValue();

		HttpPost httpPost = null;
		String tem_location = location.substring(0, location.lastIndexOf("/"));
		try {

			httpPost = new HttpPost(baseUrl + tem_location + "/items");// 续借图书的URL
			List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
			nameValuePairs.add(new BasicNameValuePair("currentsortorder",
					"current_checkout"));
			nameValuePairs.add(new BasicNameValuePair("currentsortorder",
					"current_checkout"));
			nameValuePairs.add(new BasicNameValuePair(renew_key, renew_value));
			// nameValuePairs.add(new BasicNameValuePair("requestRenewSome",
			// "续借所选馆藏"));
			nameValuePairs.add(new BasicNameValuePair("renewsome", "是"));
			httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
			response = httpclient.execute(httpPost);// 发送post请求
			int code = response.getStatusLine().getStatusCode();
			System.out
					.println("---------------renewbook------------------------");
			System.out.println(response.getStatusLine());
			if (code == 200) {

				if (response != null) {
					renewBookHtml = EntityUtils.toString(response.getEntity(),
							HTTP.UTF_8);
					// System.out.println(renewBookHtml);
					return renewBookHtml;
				}
			}

		} catch (Exception e) {

		} finally {
			httpPost.abort();
		}
		return "";

	}

这样便得到了续借请求之后的个人借阅信息页面html。之后便可以对此html解析,得到续借后的状态,如: 太快办理续借


说明

续借图书的流程为:

 点击某一书目的续借按钮,调用renewBook(LendBookInfo lendBookInfo)方法,得到post请求后的(借阅图书信息的html),对此html进行再次解析,调用List<LendBookInfo>getLendBookInfos(String lendInfoHtml),得到新的图书借阅信息。此时的状态中便发生了相应改变。


测试

public static void main(String[] args) {

		boolean isConn = LibraryUtil.login(stuNo, password);

		/**
		 * 若登陆成功则将信息保存到数据库(学号、密码需要加密)。
		 */
		if (isConn) {
			String resultHtml = LibraryUtil.getResultHtml();
			UserInfo userInfo = UserInfoHandler.getUserInfo(resultHtml);
			userInfo.setStuNo(stuNo);
			userInfo.setPassword(password);
			System.out.println("========");
			System.out.println(userInfo.toString());

			String lendInfoHtml = LibraryUtil.getCurLendInfo();
			List<LendBookInfo> lendBookInfos = UserInfoHandler
					.getLendBookInfos(lendInfoHtml);
			for (LendBookInfo bookInfo : lendBookInfos) {
				System.out.println(bookInfo);
			}
			//借阅列表的第一本
			LendBookInfo lendBookInfo1 = lendBookInfos.get(0);
			//续借第一本
			String bookinfo = LibraryUtil.renewBook(lendBookInfo1);
			// lendInfoHtml = LibraryUtil.getCurLendInfo();
			//再次解析html,得到 新的借阅信息列表
			lendBookInfos = UserInfoHandler.getLendBookInfos(bookinfo);
			for (LendBookInfo bookInfo : lendBookInfos) {
				System.out.println(bookInfo);
			}
		}
	}


如此便实现了续借功能。。。








  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书馆管理系统使用说明书 主要功能 图书馆管理系统由读者管理、图书管理、借阅、归还、续借、系统查询、排行榜、系统设置等管理模块组成,其规划功能模块如下: q 读者管理 读者管理主要实现读者类型管理、读者档案管理等功能。 q 图书管理 图书管理主要实现图书类型设置、图书档案管理等功能。 q 借阅 借阅主要实现读者借阅图书功能。 q 续借 借阅主要实现读者续借图书功能。 q 归还 归还主要实现读者归还图书功能。 q 系统查询 系统查询主要实现图书档案查询、图书借阅查询、借阅到期提醒等功能。 q 排行榜 排行榜主要实现读者借阅排行榜、图书借阅排行榜等功能。 q 系统设置 系统设置主要实现图书馆信息、管理员添加、参数设置、书架设置、修改口令等功能。 操作注意事项 用户在使用《图书馆管理系统》之前,应注意以下事项: (1)管理员用户名和密码为:mr、mrsoft。 业务流程 要想运行本系统,请按照以下流程操作: (1)在“系统设置”/“管理员设置”中添加操作员。 (2)在“系统设置”/“参数设置”中设置办证费及有效期限。 (3)在“系统设置”/“书架设置”中设置书架类别。 (4)在“图书管理”/“图书类型设置”中添加图书类别。 (5)在“图书管理”/“图书档案管理”中添加图书信息。 (6)在“读者管理”/“读者类型管理”中添加图书类型。 (7)在“读者管理”/“读者档案管理”中添加读者信息。 (8)在“借阅”、“续借”、“归还”中可分别执行相应的操作。 (9)在“系统查询”中可查询图书信息、图书借阅信息及借阅到期提期。 (10)在“排行榜”中可按图书借阅次数进行排行,也可以按读者的借阅次数进行排行。
系统功能与特色: (1)图书类别信息管理:作为一个学校的图书馆,涉及到的图书是很多的,这就有必要对图书进行分门别类,这样有利于对图书的查询和管理。不同的图书类别可以借阅的天数也是不一样的,管理员登陆系统后可以对图书类别进行添加,更新和删除操作。 (2)图书信息管理:当管理员对图书类别信息添加完成后,就可以开始进行图书信息的录入了,只有将图书馆拥有的图书录入系统中,读者朋友在登陆系统后才可以查询到自己喜欢的该图书。 (3)读者类别管理:为了方便图书馆的管理,系统对读者的类别进行了分别,不同的读者类别可以借阅图书的数目是不一样的。管理员在登陆系统后可以这个读者类别信息进行管理,包括添加读者类别信息,修改读者类别,删除读者类别,特别是执行删除操作时需要保持数据库表数据之间的一致性。 (4)读者信息管理:当管理员把读者类别信息编辑好完成后,就可以办理读者信息了,管理员可以添加新的读者信息,修改已经存在的读者信息,删除读者信息。 (5)图书借阅管理:读者可以登陆系统查询自己喜欢的图书,然后到图书馆进行图书借书的登记操作,当读者看完了书或需要归还时,需要拿着自己的图书图书馆进行归还,此时有管理员办理图书归还业务。当然,如果读者借阅了图书因某种原因忘记了归还,管理员还可以对这些信息进行统计,同时,管理员还可以对已经出借的图书进行续借的办理。 (6)系统设置: 管理员登陆系统后可以修改图书馆的信息,可以修改管理其他操作员的信息,可以管理书架信息。 (7)口令更改:无论是管理员或读者身份登陆系统后,都可以对自己的登陆密码进行修改操作,这样保证了系统的安全性。 (8)系统特点:采用MVC设计模式,完全采用面向对象的设计思想,使用了开源框架Struts。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值