图书馆图书定位法javaWord格式.docx
《图书馆图书定位法javaWord格式.docx》由会员分享,可在线阅读,更多相关《图书馆图书定位法javaWord格式.docx(16页珍藏版)》请在冰豆网上搜索。
![图书馆图书定位法javaWord格式.docx](https://file1.bdocx.com/fileroot1/2022-10/8/96fd1e18-679f-4917-ae81-55adf8df8875/96fd1e18-679f-4917-ae81-55adf8df88751.gif)
*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)
H'
room==2)
returnshelf_Let_begin[numForLetter];
publicintgetShelf_Let_end(charfirstLet,introom)
shelf_Let_end[numForLetter]=13;
shelf_Let_end[numForLetter]=7;
shelf_Let_end[numForLetter]=6;
returnshelf_Let_end[numForLetter];
publicintgetTbegin(charfirstLet2,introom)
if(firstLet2=='
G'
)
Tbegin=8;
elseif(firstLet2=='
M'
Tbegin=13;
N'
Tbegin=19;
P'
Tbegin=24;
if(room==7){
Tbegin=0;
S'
Tbegin=17;
U'
Tbegin=21;
if(room==6)
returnTbegin;
publicintgetTend(charfirstLet2,introom)
Tend=10;
Tend=18;
Tend=24;
Tend=29;
if(room==7)
Tend=16;
Tend=21;
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”也要用到),所以要先进行字符串处理。
*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("
))
{//D1---->
D100
tempStr=tempStr+"
00"
elseif(strLength==2&
tempStr.charAt(0)>
48)
{//D11----->
D110
tempStr.charAt(0)==48)
{//D01----->
D0.1
0."
+tempStr.substring
(1);
/*第二步处理字符串*/
else
/*获得小数点,冒号,杠号的拉置,无数小数则为-145-->
'
-'
46-->
.'
58-->
:
for(inti=0;
i<
tempStr.length();
i++)
if(tempStr.charAt(i)==46||tempStr.charAt(i)==58)