用Hbase编写图书管理系统

一、项目介绍

在图书馆,尤其是在各大图书馆,对于图书的管理是相当重要的,而且也是相当麻烦,它是图书管理中最基本的一项常规性的工作。而长期以来,图书管理都是依赖人工进行的,面对如此多的借阅信息就造成相当一部分的资源的浪费。图书管理系统是为了解决图书馆的管理和图书借阅的相关信息的更新操作,包括管理员的调动更新,书籍的添加修改信息,用户的借阅相关书籍以及相关书籍的退还需要在本系统内进行更新操作;

图书管理系统的设计可以最大程度的减轻管理人员的工作量,提升管理图书的效率,通过图书管理系统能过快速找到书籍的在册情况,以及及时的更新图书的借还信息。

二、需求分析

2.1项目设计规划

本项目的设计目标旨在方便图书管理员的操作,减少图书管理员的工作量并使其能更有效的管理书库中的图书,实现了传统的图书管理工作的信息化建设。

本系统的服务对象为图书馆流通部门的工作人员,用户界面友好,不需计算机专业的专门训练即可使用本系统。

图书管理处理的信息量比较大。因此对于本系统的设计,需要采取以下一些原则:

删除不必要的管理冗余,实现管理规范化、科学化。

程序代码标准化,软件统一化,确保软件的可维护性和实用性

能够连接各个关联的数据库,获取数据库中的信息。保证各个数据库表格相关的项目之间有相同的属性。

2.2实施方案

系统功能:总体任务是实现图书管理的系统化,规范化,和自动化。

系统功能分析是在系统开发的总体任务的基础上完成的。

创建相应的借阅信息表包括三部分内容:

用户:编号,姓名,年龄,工作,电话;

管理员:管理员编号,管理员姓名,年龄,上岗日期,工资;

图书信息:书的编号,书名,作者,出版日期,出版单位,图书位置,所属分类;

关于行健的设计:采用书的编号作为整体的行键,保证书被借阅的惟一性;

三、数据模型设计

借阅信息表第一部分(jieyue):


用户(user)


编号(uno)


姓名(uname)


年龄(uage)


工作(uwork)


电话(ucall)


A1001


19001


xiaozhao


21


rj


123123


A1002


19001


xiaozhao


21


rj


123123


A1003


A1004


B1001


19002


xiaowang


22


jz


123456


B1002


B1003


C1001


C1002


C1003


19003


xiaoyang


23


sj


123789

借阅信息表第二部分(jieyue):


管理员(manager)


编号(mno)


姓名(mname)


年龄(mage)


上岗日期(mdate)


工资(msalary)


1001


lili


36


2018


3000


1001


lili


36


2018


3000


1001


lili


36


2018


3000


1001


lili


36


2018


3000


1002


zhangfan


45


2012


3500


1002


zhangfan


45


2012


3500


1002


zhangfan


45


2012


3500


1003


wangwei


33


2013


3400


1003


wangwei


33


2013


3400


1003


wangwei


33


2013


3400

借阅信息表第三分(jieyue):


图书信息(book)


书名(bname)


作者(bauthor)


出版日期(bdate)


出版单位(

Bconcern)


所放位置(bwhere)


类别(bsort)


qiuxingshandian


liucixin


2005


sichuankeji


a


kehuan


santi


liucixin


2008


chongqing


a


kehuan


weilaishijie


wangxiaobo


2008


shanghai


a


kehuan


tianyi


qianlifang


2004


sichuang


a


kehuan


chenailuoding


alai


1998


renmin


b


wenxue


renleijianshi


helali


2014


zhongxin


b


wenxue


laorenyuhai


haimingwei


1999


renmin


b


wenxue


xinxiangyue


luyu


2011


zhongxin


c


xiju


moji


zengzimo


2012


renmin


c


xiju


taoqibao


yanghongying


2009


dahe


c


xiju

上图为借阅信息总体的表的结构;

四、数据库实施

创建jieyue表:

package com.simple.create;
        import java.io.IOException;
        import
org.apache.hadoop.conf.Configuration;
        import
org.apache.hadoop.hbase.HBaseConfiguration;
        import
org.apache.hadoop.hbase.HColumnDescriptor;
        import
org.apache.hadoop.hbase.HTableDescriptor;
        import
org.apache.hadoop.hbase.TableName;
        import
org.apache.hadoop.hbase.client.HBaseAdmin;
        public class CreateTable {
        public static void main(String[]
args) throws IOException {

//一、配置文件设置
        //创建用于客户端的配置类实例
        Configuration config =
HBaseConfiguration.create();

//客户端连接到zookeeper
      
 config.set("hbase.zookeeper.quorum",
"192.168.1.2:2181");

//实例化对象并创建表   
        HTableDescriptor
tableDesc = new HTableDescriptor(TableName.valueOf("jieyue"));

//设置列族并限制版本数
        HColumnDescriptor columnDesc1 = new
HColumnDescriptor("user");
        columnDesc1.setMaxVersions(5);
        HColumnDescriptor columnDesc2 = new
HColumnDescriptor("manager");
        columnDesc2.setMaxVersions(5);

HColumnDescriptor
columnDesc3 = new HColumnDescriptor("book");
        columnDesc3.setMaxVersions(5);
        tableDesc.addFamily(columnDesc1);
        tableDesc.addFamily(columnDesc2);

tableDesc.addFamily(columnDesc3);   
     
        HBaseAdmin hbaseAdmin = new
HBaseAdmin(config);

//创建表
      
 hbaseAdmin.createTable(tableDesc);

//释放资源      
        hbaseAdmin.close();
        }
        }

插入数据:

package com.simple.put;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.util.Bytes;

public class PutTest {

public static void main(String[]
args) throws IOException {

// 配置文件设置

// 创建用于客户端的配置类实例

Configuration  config = HBaseConfiguration.create();

// 设置连接zookeeper的地址

config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");

// 获得要操作的表的对象。

// 第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

// (注:"jieyue"为上节中所创建的表)

HTable
 table = new HTable(config, "jieyue");

// 设置Put对象

// 设置行健值为"a1001"

Put
 put = new Put(Bytes.toBytes("a1001"));

// 设置列族、列、cell值

put.add(Bytes.toBytes("user"), Bytes.toBytes("name"),
Bytes.toBytes("xiaozhao"));

// 插入一行数据

table.put(put);

// 释放资源

table.close();

}

}

查询数据:

package com.simple.scan;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

public class ScanTest
{

public static void main(String[]
args) throws IOException {

//配置文件设置

// 创建用于客户端的配置类实例

Configuration
 config = HBaseConfiguration.create();

// 设置连接zookeeper的地址

// hbase客户端连接的是zookeeper

config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");

//获得要操作的表的对象。

// 第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

// (注:"jieyue"为上节中所创建的表)

HTable  table
new HTable(config, "jieyue");

//创建Scan对象

Scan  scan
new Scan();

//根据Scan对象获取查询结果ResultScanner对象resultScanner

ResultScanner
 resultScanner = table.getScanner(scan);

for (Result
result : resultScanner) {

// 将结果转换为字符串并打印到控制台

System.out.println("查询jieyue中的所有数据==>"+Bytes.toString(result.getValue(Bytes.toBytes("book"),
Bytes.toBytes("bname"))));

}

// 五、释放资源

table.close();

}

}

查询指定范围的数据:

package com.simple.scan;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import  org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

public class ScanSettingTest {

public  static
void main(String[] args) throws IOException {

//配置文件设置

//  创建用于客户端的配置类实例

Configuration
 config = HBaseConfiguration.create();

//  设置连接zookeeper的地址

//
 hbase客户端连接的是zookeeper

config.set("hbase.zookeeper.quorum",
 "192.168.1.2:2181");

//获得要操作的表的对象。

//  第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

//  (注:"jieyue"为上节中所创建的表)

HTable  table = new HTable(config, "jieyue");

//创建Scan对象

//  第一个参数"rk001"为行健的开始位置;第二个参数"rk003"为行健的结束位置

Scan
 scan = new Scan(Bytes.toBytes("a1001"),
 Bytes.toBytes("b1003"));

//根据Scan对象获取查询结果ResultScanner对象resultScanner

ResultScanner
 resultScanner = table.getScanner(scan);

for  (Result
result : resultScanner) {

//  将结果转换为字符串并打印到控制台

System.out.println("查询jieyue中指定范围内的数据==>"+Bytes.toString(result.getValue(Bytes.toBytes("book"),
 Bytes.toBytes("bname"))));

}

//释放资源

table.close();

}

}

Get查询:

package  com.simple.get;

import  java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import  org.apache.hadoop.hbase.HBaseConfiguration;

import  org.apache.hadoop.hbase.client.Get;

import  org.apache.hadoop.hbase.client.HTable;

import  org.apache.hadoop.hbase.client.Result;

import  org.apache.hadoop.hbase.util.Bytes;

public class  GetTest {

public  static void
main(String[] args) throws IOException {

//  一、配置文件设置

//  创建用于客户端的配置类实例

Configuration  config
= HBaseConfiguration.create();

//  设置连接zookeeper的地址

//  hbase客户端连接的是zookeeper

config.set("hbase.zookeeper.quorum",
 "192.168.1.2:2181");

//  二、 获得要操作的表的对象。

//  第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

//  (注:"jieyue"为上节中所创建的表)

HTable  table = new
HTable(config, "jieyue");

//  三、设置Get对象

//  设置要查找的行健值为"a1001"

Get  get = new
Get(Bytes.toBytes("a1001"));

//  四、根据Get对象获取查询结果Result对象

Result  result =
table.get(get);

//  五、设置要查询的列族名、列名

byte[] a1001_vals =
result.getValue(Bytes.toBytes("baseinfo"),
 Bytes.toBytes("name"));

//  六、将结果转换为字符串并打印到控制台

System.out.println("行健为a1001、列族为book、列为bname的值==>"+Bytes.toString(a1001_vals));

//  七、释放资源

table.close();

}

}

删除数据:

package com.simple.del;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.client.Delete;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.util.Bytes;

public class DelTest
{

public static void main(String[]
args) throws IOException {

//配置文件设置

// 创建用于客户端的配置类实例

Configuration
 config = HBaseConfiguration.create();

// 设置连接zookeeper的地址

// hbase客户端连接的是zookeeper

config.set("hbase.zookeeper.quorum", "192.168.1.2:2181");

//获得要操作的表的对象。

// 第一个参数"config"为配置文件;第二个参数"jieyue"为数据库中的表名。

HTable  table
new HTable(config, "jieyue");

//设置Delete对象

// 设置行健值为"c1001"。要删除的一行数据的行健为"c1001"

Delete  del
new Delete(Bytes.toBytes("c1001"));

//删除一行数据

table.delete(del);

table.close();

}

}

执行前:

执行后:

删除表(因之后还要用jieyue表,这里就以bbb表为例进行删除):

package com.simple.create;
        import java.io.IOException;
        import
org.apache.hadoop.conf.Configuration;
        import
org.apache.hadoop.hbase.HBaseConfiguration;
        import
org.apache.hadoop.hbase.client.HBaseAdmin;
        public class DelTable
{    
            public
static void main(String[] args) throws IOException {
        //配置文件设置
        //创建用于客户端的配置类实例
        Configuration config =
HBaseConfiguration.create();
        //设置连接zookeeper的地址
        //hbase客户端连接的是zookeeper
      
 config.set("hbase.zookeeper.quorum",
"192.168.1.2:2181");
        //实例化HBaseAdmin、创建表
        //根据配置文件创建HBaseAdmin对象
        HBaseAdmin hbaseAdmin = new
HBaseAdmin(config);        
        //删除表
        //设置表bbb不可用(删除表之前需要先设置表不可用)
        hbaseAdmin.disableTable("bbb");
        //删除表bbb
        hbaseAdmin.deleteTable("bbb");  
     
        //释放资源
        hbaseAdmin.close();
        }
        }

执行前:

执行后:

五、课程设计总结

问题:1、一开始表的设置没用按照Hbase的相关的要求进行设置(类似于关系数据库);

2、行键如何进行进行选定;

3、查询删除操作时对象包的调用,相关的环境的搭建;

解决:1、表的设置通过对相关的HBASE的内容进行整理查看,知道了表的结构即用尽量少的表做尽量多的操作,最终定下采用一个表的设计方案;

2、行键的设置通过对图书管理系统的详细思考,最终得出图书的借针对图书来说的,所以最后定的是对图书的编号当成行键,相关的管理员管理不同类别的图书,包括日常的整理,图书的实际添加,相关图书的借阅;

3、对象包的调用是通过咨询同学进行包的调用,目的是达到Java程序的正常运行;

总结:收获是巩固了相关的HBASE的知识,加强了对分布式数据库的理解。通过图书管理系统的设置可以方便的进行图书的增、删、改、查操作,极大的减轻了图书管理员的工作量。

(本实验在SimpleBDT平台上操作)

注:本文为自己创作,需转载请标注出本文链接;欢迎大家指导,改正。

原文地址:https://www.cnblogs.com/gangzai369/p/12145161.html

时间: 2024-07-31 07:17:28

用Hbase编写图书管理系统的相关文章

图书管理系统

该图书馆里系统能实现基本的对图书信息的操作和借阅.归还功能. 一.主要内容: 本课程设计结合本学期所学C语言知识,数组.函数.结构体.指针.链表.文件读取操作等等,准备设计开发一个简单的图书管理系统.设计开发这个系统需要用到链表.文件读取操作.结构体.函数.指针.等C语言知识.本课程设计将会实现对图书信息的账号登录.注册账号.密码修改.密码查找.查找.输出.排序.备份.恢复.图书借阅和归还功能.本着简单.易用的设计原则,本课程设计在尽量优化界面在保证输入输出美观的同时又不失友好的交互界面. 本次

图书管理系统测试计划说明书

图书管理系统测试计划说明书 一. 引言 1.1 编写目的 本测试计划文档作为指导此测试项目循序渐进的基础,帮助我们安排合适的资源和进度,避免可能的风险.本文档有助于实现以下目标: 1) 确定现有项目的信息和应测试的软件结构. 2) 列出推荐的测试需求 3) 推荐可采用的测试策略,并对这些策略加以详细说明 4) 确定所需的资源,并对测试的工作量进行估计. 5) 列出测试项目的可交付元素,包括用例以及测试报告等. 1.2 背景 随着人们知识层次的提高,阅读成为日常生活中不可缺少的一部分.而图书馆的存

[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website development Tags asp.net / mvc4 相关资源 ibatis manual pro git 廖雪峰的官方网站 BookMS-V1.0 上一篇链接 任务简介 开发工具:VS2010 项目框架:MVC4 浏览器:Chrome 数据库ORM框架:iBatis.net 数据库:mysql 后端开

《图书管理系统》软件需求说明书

图书管理系统                                                                 软件需求说明书 一.引言 1.1编写目的 一直以来人们使用传统的人工方式管理图书馆的日常工作,对于图书馆的借书和还书过程,想必大家都已很熟悉.在计算机尚未在图书馆广泛使用之前,借书和还书过程主要依靠手工.一个最典型的手工处理还书过程就是:读者将要借的书和借阅证交给工作人员,工作人员将每本书上附带的描述书的信息的卡片和读者的借阅证放在一个小格栏里,并在借阅证

基于MVC的图书管理系统

<span style="font-size:18px;">用Java编写一个图书管理系统:</span> <span style="font-size:18px;">需求:能列表化显示图书信息:并且能够完成图书出入库.显示全部.增加图书.客户能够购买图书:</span> <span style="font-size:18px;"> </span> <span styl

图书管理系统可行性分析报告

1引言 1.1编写目的 可行性研究的目的是研究图书管理系统的总体需求.实现方案,并分析开发系统的可行性,为决策者提供是否开发该系统的依据和建议. 初拟系统实验报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排.明确开发风险及其所带来的经济效益. 1.2背景 项目名称:图书销售管理系统 项目用户:图书借阅员.图书管理员.系统管理员.图书借阅者. 开发员: 大佬,皮皮周,DEDRAGON,千城墨白, 赵佳美小姐姐,国字号, 发抛,线段, 苦心糖,无法无天 1.3定义  图书销售管理系

《图书管理系统》—需求分析报告

目录 一.引言 1 1.2项目背景 1 二.任务概述 2 2.2用户特点 2 2.3需求概述 2 2.4功能的规定 3 三.功能需求 3 3.1功能划分 3 3.2功能描述 4 四.性能需求 4 4.1数据精确度 4 4.2系统响应时间 4 4.3适应性 4 4.4.输入输出要求 5 4.5.数据管理 5 4.6.故障处理要求 5 4.7.其他专门要求 5 五.运行需求 5 5.1.设备 5 5.2支持软件 6 5.3接口 6 5.3.1用户接口 6 5.4控制 6 六.数据描述 7 6.1静态

制作简单的图书管理系统

1 package libray; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 public class DbConn { 10 11 private static final String DRIVER="com.mysql

运用面向对象的方法设计“图书管理系统”

运用面向对象的方法设计“图书管理系统” 题目要求: 编写实现图书信息的输入.显示.查找.添加.删除.保存.排序等功能的函数: 图书分为教材,参考书,期刊等:需提供多态例子: 应提供键盘式选择菜单实现功能选择: 数据输入和结果输出要用文件存放. 注: 1)图书信息包括:图书编号.书名.作者.出版社.出版时间.价格: 2)数据输入要求实现2种功能,即可以从键盘输入也可以从文件“book.txt”输入: 3)查找需要按照不同字段都可以进行查找,如按编号查找.按书名查找等: 4)删除需要按照不同字段都可