图书馆管理系统是图书馆管理工作中不可缺少的部分,对于图书馆的管理者和使用者来说都非常重要了,故相对于传统的手工方式或性能较低的图书馆管理系统管理图书馆的日常事务相比,设计一个能提供快速的图书信息检索功能、快捷的图书借阅、归还流程,为管理者与读者提供充足的信息和快捷的数据处理手段的系统,能更好的对图书进行管理。所以从读者与图书管理员的角度出发,本着以读者借书、还书快捷、方便的原则,要求本系统应具有以下特点:
√具有良好的系统性能,友好的用户界面。
√较高的处理效率,便于使用和维护。
√采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期。
√系统尽可能简化图书馆管理员的重复工作,提高工作效率。
√简化数据查询、统计难度。
最高层用例图中展开读者借书的用例图如下图所示:
读者借助此图书管理系统子系统,可以进行一下操作:
读者进行还书操作时,必须保证图书完整;
最高层用例图中展开图书馆管理员处理借书、还书等的用例图如下图所示:
图书管理员用例描述:
图书管理员使用系统进行的操作主要有:
其中在处理还书时,要查看图书的完整性;处理读者借书时,要检查读者信息;
最高层用例图中展开系统管理员进行系统维护的用例图如下图2-4所示:
系统管理员使用系统进行的操作主要有:
2.图书管理系统对象模型
根据需求描述,提取出管理员,借阅者,图书等几个对象.
3.1对象模型描述
下面对这个几个对象进行详细描述并建模:
3.1.1.读者Borrower类:
读者在系统注册的信息包括一下几点:
姓名(name),
住址(address),
城市(city),
省/州(state),
邮政编码(zip),
可借数的最大数目(maxbook),
借书期限(maxday),
读者编号(userid),
借书证号码(borrow_number);
读者使用系统可进行的操作有:
查询-------find(),
借书------borrow(),
还书-------return_back();
3.1.2.系统管理员Administrator类:
3.1.3.图书管理员Librarian类:
图书管理员也要在系统内注册,注册信息如下:
省(state);
系统为每个管理员分配一个唯一编号workID.
更新借书还书信息------update();
增加预留----------------create();
删除预留信息----------destroy();
3.1.4.书目Title类:
书目类代表图书,在系统中要保存每一本图书的资料,这些信息包括:
书名(name),
作者(author),
书号(isbn),
库存数量(total_number),
借阅号(borrowed_number),
是否可以借出(is_allowedForBorrow);
在书类的操作有一些:
查找书目-------------------find();
增加书目----------------create();
删除书目----------------destroy();
借书----------------------borrow();
还书----------------------return_back();
预留图书--------------reserve()
3.1.5.其他类:
Item类:此类代表一个书目的一份拷贝
Loan类:代表对超过还书期限的读书进行罚金的类
Reserve类:预留图书类
3.2类代码如下:
Reader类:
/**
*读者对象
*@authorcz
*
*/
publicclassReaderextendsUser{
privateStringsex;//性别
privateinttake;//借出
privateintrevert;//归还
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
publicintgetTake(){
returntake;
publicvoidsetTake(inttake){
this.take=take;
publicintgetRevert(){
returnrevert;
publicvoidsetRevert(intrevert){
this.revert=revert;
Student类:
publicclassStudentextendsReader{
publicStringsclass;//学生的班级
publicStringgetSclass(){
returnsclass;
publicvoidsetSclass(Stringsclass){
this.sclass=sclass;
publicStringtoString(){
return"您好,尊敬的学生用户"+getName()+"\n你的班级:"+getClass()+"\n你的性别"+getSex()
+"\n你已借了:"+getTake()+"\n你已还:"+getRevert()
+"\n你的用户id:"+getId();
Teacher类:
publicclassTeacherextendsReader{
privateStringlevel;//级别:讲师/教授/助教
publicStringgetLevel(){
returnlevel;
publicvoidsetLevel(Stringlevel){
this.level=level;
@Override
return"您好,尊敬的老师\n你的级别处于:"+getLevel()+"\n你的性别"+getSex()
+"\n你的用户id:"+getId()+"\n你的名字:"+getName()
+"\n你的年龄:"+"]";
Test类:
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Scanner;
publicclassTest{
staticintcount=0;
staticList
staticBufferedReaderbr;
publicstaticvoidmain(String[]args){
menu();
init();
//System.out.println(list);
System.out.println("请选择功能");
Scannerinput=newScanner(System.in);
intselect=input.nextInt();
switch(select){
case0:
userDenglu();break;
case1:
System.out.println("抱歉,该功能还没有开发");break;
case2:
case3:
System.exit(0);
System.out.println("您已成功退出");
publicstaticvoidmenu(){
System.out.println("--------------------欢迎使用图书管理系统-------------");
System.out
.println("|【1】用户注册|");
.println("|【2】信息查询|");
.println("|【3】退出系统|");
.println("----------------------------------------------------");
privatestaticvoidinit(){
try{
br=newBufferedReader(
newFileReader(newFile("txt/denglu.txt")));
Stringstr=null;
while((str=br.readLine())!=null){
list.add(str);
br.close();
}catch(FileNotFoundExceptione){
//TODOAuto-&-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
publicstaticbooleanlogin(Stringname,Stringpw){
booleanflag=false;
for(inti=0;i if(list.get(i).contains(name+"&-&"+pw)){ count=i; flag=true; break; returnflag; publicstaticvoiduserDenglu(){ System.out.println("请输入用户名:"); Stringname=input.nextLine(); System.out.println("请输入密码"); Stringpassword=input.nextLine(); if(login(name,password)){ System.out.println("登陆成功"); Stringstr=list.get(count); //System.out.println(count); if(str.split("&-&")[2].equals("s")){ System.out.println("你是学生"); Students=newStudent(); s.setName(name); System.out.println("你的名字为:"+s.getName()); }elseif(str.split("&-&")[2].equals("t")){ System.out.println("你是老师"); Teachert=newTeacher(); t.setName(name); System.out.println("你的名字为:"+t.getName()); }else{ userDenglu(); User类: *用户对象 publicclassUser{ privateintid; privateStringname; privateintpassWord; publicintgetId(){ returnid; publicvoidsetId(intid){ this.id=id; publicStringgetName(){ returnname; publicvoidsetName(Stringname){ this.name=name; publicintgetPassWord(){ returnpassWord; publicvoidsetPassWord(intpassWord){ this.passWord=passWord; Book类: packagebean; publicclassbook{ privateStringbookName; privateStringauthor;//作者 privateStringtype; privateintnumber; publicStringgetAuthor(){ returnauthor; publicvoidsetAuthor(Stringauthor){ this.author=author; publicStringgetBookName(){ returnbookName; publicvoidsetBookName(StringbookName){ this.bookName=bookName; publicintgetNumber(){ returnnumber; publicvoidsetNumber(intnumber){ this.number=number; publicStringgetType(){ returntype; publicvoidsetType(Stringtype){ this.type=type; Borrow类: publicclassborrow{ privateStringuserName; privateStringtime; privateStringbookStatic;//借阅状态(借阅中,已归还) publicStringgetBookStatic(){ returnbookStatic; publicvoidsetBookStatic(StringbookStatic){ this.bookStatic=bookStatic; publicStringgetTime(){ returntime; publicvoidsetTime(Stringtime){ this.time=time; publicStringgetUserName(){ returnuserName; publicvoidsetUserName(StringuserName){ this.userName=userName; book-main类: packagemain; importbean.book; publicclassbookmain{ publicvoidsetbook(ArrayListbolist){ System.out.println("请依次填写所要添加书籍的编号书名作者类型数量"); Scannersc=newScanner(System.in); bookbo=newbook(); bo.setId(sc.nextInt()); bo.setBookName(sc.next()); bo.setAuthor(sc.next()); bo.setType(sc.next()); bo.setNumber(sc.nextInt()); bolist.add(bo); System.out.println("添加成功"); publicvoidfindbook(ArrayListbolist){ System.out.println("请输入要查询的书名"); System.out.println("书籍编号名称作者类型数量"); StringbookName=sc.next(); for(inti=0;i bookbo=(book)bolist.get(i); if(bo.getBookName().equals(sc.next())){ System.out.println(bo.getId()+""+bo.getBookName()+""+ bo.getAuthor()+""+bo.getType()+""+ bo.getNumber()); publicvoidshow(ArrayListbolist){ bookManagermain类: publicclassbookManagermain{ System.out.println("》》》》》》欢迎来到图书管理系统《《《《《《"); ArrayListbolist=newArrayList(); ArrayListowlist=newArrayList(); while(true){ System.out.println("请选择您将要进行的操作"); System.out.println("1,添加书籍2,搜索书籍3,查看图书"); System.out.println("4,借阅书籍5,归还书籍6,查看借阅信息7,退出"); inta=sc.nextInt(); if(a==1){ bookmainbm=newbookmain(); bm.setbook(bolist); }elseif(a==2){ bm.findbook(bolist); }elseif(a==3){ bm.show(bolist); }elseif(a==4){ borrowmainbm=newborrowmain(); bm.add(owlist,bolist); }elseif(a==5){ bm.Return(owlist,bolist); }elseif(a==6){ bm.show(owlist); Borrow-main类: importbean.borrow; publicclassborrowmain{ publicvoidadd(ArrayListowlist,ArrayListbolist){ borrowbo=newborrow(); bo.setUserName(sc.next()); bo.setTime(sc.next()); owlist.add(bo); bo.setBookStatic("借阅中"); bookboo=(book)bolist.get(i); if(boo.getBookName().equals(sc.next())){ boo.setNumber(boo.getNumber()-1); System.out.println("借阅成功"); publicvoidshow(ArrayListowlist){ for(inti=0;i borrowbo=(borrow)owlist.get(i); System.out.println(bo.getId()+""+bo.getBookName()+""+bo.getUserName()+""+bo.getTime()+""+bo.getBookStatic()); publicvoidReturn(ArrayListowlist,ArrayListbolist){ System.out.println("请输入书名"); bo.setNumber(bo.getNumber()+1); System.out.println("归还成功"); 总体设计 “图书管理系统”系统设计用包图描述,如图所示。 图书管理系统动态模型如下图所示: 图书管理系统动态模型 系列图 数据需求:要查询的图书名称 图书管理员处理书籍借阅的时序图如下图5-3所示: 系统管理员删除书目的时序图如下图所示: 数据需求: 书目信息 主流程: a)系统管理员向系统提交要删除的书目 b)系统查找此书目 c)系统查找此书目下的所有拷贝 d)系统删除此书目的所有拷贝 e)系统删除此书目 系统管理员添加借阅者帐户的时序图如下图所示: a)系统管理员填写新读者的信息 b)2.提交信息,创建读者信息保存到数据文件 系统管理员添加书籍的时序图如下图所示: 每本书的拷贝的详细资料 主流程描述: a)系统管理员向系统提交新书资料(additem()); c)系统返回查询结果; d)查到书目,则提交,添加此书目的拷贝。 图书管理系统活动图 借阅者的活动图如下图所示: 图书管理员的活动图如下图所示: b)在处理还书时,系统会计算读者的还书期限是否过期,如果过期,则要交一定的罚金,并且更新借阅信息; c)处理借书时,系统会验证此读者借书的数量是否超过了限制,如果超过最大可借书的数目时,拒绝继续借书。 系统管理员维护借阅者帐户的活动图如下图所示: b)通过系统验证后,进入管理主界面,可以对借阅者进行管理; d)可以为读者注册资料,使其能通过系统借书,更新读者的资料。 系统管理员进行书目信息维护的活动图如下图所示 b)通过验证后,系统管理员可以对书目进行管理,购买了新书后,需要向系统增加新的书目信息;