图书馆图书定位法java.docx
- 文档编号:370729
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:16
- 大小:62.78KB
图书馆图书定位法java.docx
《图书馆图书定位法java.docx》由会员分享,可在线阅读,更多相关《图书馆图书定位法java.docx(16页珍藏版)》请在冰豆网上搜索。
图书馆图书定位法java
图书馆图书定位法(java)
————————————————————————————————作者:
————————————————————————————————日期:
最近做了个Android的图书馆应用,我负责通过一本图书的索书号定位这本图书的位置(哪个书库,那号书架),比较简单,算法还谈不上。
我校的图书和其他学校都一样,都是扫按“中国图书馆图书分类法”进行编目。
索书号都是“A111.11/a111”类型。
“/”右边是学校自己编上去的,左边的同一本书如果按中图法分类都会是一样的。
1.图书馆抽象化
先将图书馆的书库,书架转化成抽象数据内容。
有8个书库,每个书库分别有1-30号的书架。
由下图可知道,索书号第一位字母相同的可分布在不同的书库。
2.过程
接下来记录每个书库每个书架上的第一本书的索书号。
8*30=240,得有240条记录。
还得记录每个书库每个字母的书架号区间,如以D开始在2号书库的书架号1至13.(这个过程三个人用了二小时才弄完)
packagefind_index;
/*
*
*ByMrlilastupdate:
2013.10.0611:
00
*
*shelf的实体类
*
*1)存储每个字母对应的书架号,如D有19---26,分别记录下19和26在不同的数组中
*2)存储每个库每个架子的第一本书的索书号,存在一个二维数组中
*3)对同一个字母在不同的库的条件进行判断,是的话重新赋值对应的书架号
*4)提供获取书架号区间和获取每一个书架号第一本书的索书号的函数
*
**/
publicclassShelf{
privateintshelf_Let_begin[];
privateintshelf_Let_end[];
privateintTbegin;//T开始的情况特殊
privateintTend;
privatecharshelfTailLet[][];
privateintshelfTailNum[][];
privatefloatshelfHeadNo[][];
publicShelf(){
//每个字母的架子从0开始,与书架的HEADTAIL保持一至
shelf_Let_begin=newint[26];
shelf_Let_end=newint[26];
//很多条数据,这里省略掉
}
publicintgetShelf_Let_begin(charfirstLet,introom)
{
intnumForLetter=(int)firstLet-'A';
if(firstLet=='D'&&room==1)
{
shelf_Let_begin[numForLetter]=0;
}
elseif(firstLet=='F'&&room==3)
{
shelf_Let_begin[numForLetter]=0;
}
elseif(firstLet=='H'&&room==2)
{
shelf_Let_begin[numForLetter]=0;
}
returnshelf_Let_begin[numForLetter];
}
publicintgetShelf_Let_end(charfirstLet,introom)
{
intnumForLetter=(int)firstLet-'A';
if(firstLet=='D'&&room==1)
{
shelf_Let_end[numForLetter]=13;
}
elseif(firstLet=='F'&&room==3)
{
shelf_Let_end[numForLetter]=7;
}
elseif(firstLet=='H'&&room==2)
{
shelf_Let_end[numForLetter]=6;
}
returnshelf_Let_end[numForLetter];
}
publicintgetTbegin(charfirstLet2,introom)
{
if(firstLet2=='G')
{
Tbegin=8;
}
elseif(firstLet2=='M')
{
Tbegin=13;
}
elseif(firstLet2=='N')
{
Tbegin=19;
}
elseif(firstLet2=='P')
{
Tbegin=24;
if(room==7){
Tbegin=0;
}
}
elseif(firstLet2=='S')
{
Tbegin=17;
}
elseif(firstLet2=='U')
{
Tbegin=21;
if(room==6)
{
Tbegin=0;
}
}
returnTbegin;
}
publicintgetTend(charfirstLet2,introom)
{
if(firstLet2=='G')
{
Tend=10;
}
elseif(firstLet2=='M')
{
Tend=18;
}
elseif(firstLet2=='N')
{
Tend=24;
}
elseif(firstLet2=='P')
{
Tend=29;
if(room==7)
{
Tend=16;
}
}
elseif(firstLet2=='S')
{
Tend=21;
}
elseif(firstLet2=='U')
{
Tend=29;
if(room==6){
Tend=4;
}
}
returnTend;
}
publicfloatgetShelfHeadNo(introom,intshelfNo)
{
returnshelfHeadNo[room][shelfNo];
}
publicchargetShelfTailLet(introom,intshelfNo)
{
returnshelfTailLet[room][shelfNo];
}
publicintgetShelfTailNum(introom,intshelfNo)
{
returnshelfTailNum[room][shelfNo];
}
}
因为索书号有时可以非常复杂,加上还有下步的查找比较需要用到如“A111.1/a222”中的"A"和"111.1"(当两个书架上都有"A111"开始时,“/”后面的“a”和“222”也要用到),所以要先进行字符串处理。
packagefind_index;
/*
*
*ByMrliupdate:
2013.10.0611:
00
*没解决的问题有:
处理字符串的类
处理流程:
1)分割字符串,取“/”前面的一段字符串
2)获取第一个字符,即字母,有它就可以判断此书在哪一个库中
3)获得字母后面的,“/”前面的字符串,如果是T,获取T后面的字母,再获取这个字母后面的,“/”前面的字符串
4)根据此字符串的长度进行判断。
长度<=2时,补充0或小数点。
//////长度为2的符串且有特殊字符A-4--->A0.4
5)记录小数点位置
6)把特殊字符都干掉,只剩下数字
7)重新加回小数点
8)将字符串转成浮点数
*/
publicclassCutString{
publicstaticcharfirst_Let=0;//第一个字母
publicstaticcharfirst_Let2=0;//T的情况下第二个字母
publicstaticfloathead_Num;//8.1
publicstaticchartail_Let;
publicstaticinttail_Num;
publicstaticcharspecialForTP312;
publicCutString(Stringsrc_Str){
dealStr(src_Str);
}
publicvoiddealStr(Stringsrc_Str){
intstrLength;
intdotIndex=-1;//小数点的位置,初始化不能为0,如I245,
StringtempStr="";//临时字符串1
StringtempStr1="";//临时字符串2
StringstrCuted[]=newString[2];//用来装分割后的字符串
strCuted=src_Str.split("/");//根据‘/’分割字符串
first_Let=(char)strCuted[0].charAt(0);
tail_Let=(char)strCuted[1].charAt(0);
tail_Num=Integer.valueOf(strCuted[1].substring(1,4));
//获取首字母
tempStr=strCuted[0].substring
(1);//获取字母数字后面的字符串
if(first_Let=='T'&&strCuted[0].length()>1)
{//以T开始的取T后面的字母T110
first_Let2=(char)strCuted[0].charAt
(1);//获取字母数字后面的字符串
tempStr=strCuted[0].substring
(2);
}
strLength=tempStr.length();
/*第一步处理字符串*/
if(strLength==0)
{//D----->D0
tempStr="0";
}
elseif(strLength==1&&!
tempStr.equals("0"))
{//D1---->D100
tempStr=tempStr+"00";
}
elseif(strLength==2&&tempStr.charAt(0)>48)
{//D11----->D110
tempStr=tempStr+"0";
}
elseif(strLength==2&&tempStr.charAt(0)==48)
{//D01----->D0.1
tempStr="0."+tempStr.substring
(1);
}
/*第二步处理字符串*/
else
{
/*获得小数点,冒号,杠号的拉置,无数小数则为-145-->'-'46-->'.'58-->':
'*/
for(inti=0;i { if(tempStr.charAt(i)==46||tempStr.charAt(i)==58)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 图书 定位 java
![提示](https://static.bdocx.com/images/bang_tan.gif)