标签:问题: book src close col max esc 姓名 图片
一、项目介绍
在图书馆,尤其是在各大图书馆,对于图书的管理是相当重要的,而且也是相当麻烦,它是图书管理中最基本的一项常规性的工作。而长期以来,图书管理都是依赖人工进行的,面对如此多的借阅信息就造成相当一部分的资源的浪费。图书管理系统是为了解决图书馆的管理和图书借阅的相关信息的更新操作,包括管理员的调动更新,书籍的添加修改信息,用户的借阅相关书籍以及相关书籍的退还需要在本系统内进行更新操作;
图书管理系统的设计可以最大程度的减轻管理人员的工作量,提升管理图书的效率,通过图书管理系统能过快速找到书籍的在册情况,以及及时的更新图书的借还信息。
二、需求分析
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平台上操作)
注:本文为自己创作,需转载请标注出本文链接;欢迎大家指导,改正。
标签:问题: book src close col max esc 姓名 图片
原文地址:https://www.cnblogs.com/gangzai369/p/12145161.html