面向对象设计-图书管理系统
1.1需求分析
图书馆管理系统是图书馆管理工作中不可缺少的部分,对于图书馆的管理者和使用者来说都非常重要了,故相对于传统的手工方式或性能较低的图书馆管理系统管理图书馆的日常事务相比,设计一个能提供快速的图书信息检索功能、快捷的图书借阅、归还流程,为管理者与读者提供充足的信息和快捷的数据处理手段的系统,能更好的对图书进行管理。所以从读者与图书管理员的角度出发,本着以读者借书、还书快捷、方便的原则,要求本系统应具有以下特点:
√ 具有良好的系统性能,友好的用户界面。
√ 较高的处理效率,便于使用和维护。
√ 采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期。
√ 系统尽可能简化图书馆管理员的重复工作,提高工作效率。
√ 简化数据查询、统计难度。
最高层用例图中展开读者借书的用例图如下图所示:
读者借助此图书管理系统子系统,可以进行一下操作:
读者借助此图书管理系统子系统,可以进行一下操作:
- 查询;
- 预留;
- 借书;
- 还书;
- 查阅借阅信息。
其中,在读者进行预留图书和查询借阅信息之前,读者必须先登录系统;
读者进行还书操作时,必须保证图书完整;
最高层用例图中展开图书馆管理员处理借书、还书等的用例图如下图所示:
图书管理员用例描述:
图书管理员使用系统进行的操作主要有:
- 处理读者的送还的图书;
- 处理读者的借书要求
- 处理读者的预留图书要求
其中在处理还书时,要查看图书的完整性;处理读者借书时,要检查读者信息;
最高层用例图中展开系统管理员进行系统维护的用例图如下图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类:
图书管理员也要在系统内注册,注册信息如下:
姓名(name),
住址(address),
城市(city),
省(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类:
/**
* 读者对象
* @author cz
*
*/
public class Reader extends User {
private String sex;//性别
private int take;//借出
private int revert;//归还
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getTake() {
return take;
}
public void setTake(int take) {
this.take = take;
}
public int getRevert() {
return revert;
}
public void setRevert(int revert) {
this.revert = revert;
}
}
Student类:
public class Student extends Reader {
public String sclass;//学生的班级
public String getSclass() {
return sclass;
}
public void setSclass(String sclass) {
this.sclass = sclass;
}
public String toString() {
return "您好,尊敬的学生用户 " + getName()+"\n你的班级: " + getClass()+ "\n你的性别" + getSex()
+ "\n你已借了:" + getTake() + "\n你已还:" + getRevert()
+ "\n你的用户id:" + getId();
}
}
Teacher类:
public class Teacher extends Reader {
private String level;//级别:讲师/教授/助教
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Override
public String toString() {
return "您好,尊敬的老师 \n你的级别处于: " + getLevel() + "\n你的性别" + getSex()
+ "\n你已借了:" + getTake() + "\n你已还:" + getRevert()
+ "\n你的用户id:" + getId() + "\n你的名字:" + getName()
+ "\n你的年龄:"+"]";
}
}
Test类:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
static int count=0;
static List<String> list = new ArrayList<String>();
static BufferedReader br;
public static void main(String[] args) {
menu();
init();
// System.out.println(list);
System.out.println("请选择功能");
Scanner input = new Scanner(System.in);
int select = input.nextInt();
switch (select) {
case 0:
userDenglu();break;
case 1:
System.out.println("抱歉,该功能还没有开发");break;
case 2:
System.out.println("抱歉,该功能还没有开发");break;
case 3:
System.exit(0);
System.out.println("您已成功退出");
}
}
public static void menu() {
System.out.println("--------------------欢迎使用图书管理系统-------------");
System.out
.println("| 【0】用户登录 |");
System.out
.println("| 【1】用户注册 |");
System.out
.println("| 【2】信息查询 |");
System.out
.println("| 【3】退出系统 |");
System.out
.println("----------------------------------------------------");
}
private static void init() {
try {
br = new BufferedReader(
new FileReader(new File("txt/denglu.txt")));
String str = null;
while ((str = br.readLine()) != null) {
list.add(str);
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-&-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-&-generated catch block
e.printStackTrace();
}
}
public static boolean login(String name,String pw){
boolean flag=false;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).contains(name+"&-&"+pw)){
count=i;
flag=true;
break;
}
}
return flag;
}
public static void userDenglu() {
Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String name=input.nextLine();
System.out.println("请输入密码");
String password=input.nextLine();
if (login(name, password)) {
System.out.println("登陆成功");
String str=list.get(count);
// System.out.println(count);
if (str.split("&-&")[2].equals("s")) {
System.out.println("你是学生");
Student s=new Student();
s.setName(name);
System.out.println("你的名字为:"+s.getName());
}else if(str.split("&-&")[2].equals("t")){
System.out.println("你是老师");
Teacher t=new Teacher();
t.setName(name);
System.out.println("你的名字为:"+t.getName());
}
} else {
System.out.println("登录失败");
userDenglu();
}
}
}
User类:
/**
* 用户对象
* @author cz
*
*/
public class User {
private int id;
private String name;
private int passWord;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPassWord() {
return passWord;
}
public void setPassWord(int passWord) {
this.passWord = passWord;
}
}
Book类:
package bean;
public class book {
private int id;
private String bookName;
private String author;//作者
private String type;
private int number;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
Borrow类:
package bean;
public class borrow {
private int id;
private String bookName;
private String userName;
private String time;
private String bookStatic;//借阅状态(借阅中,已归还)
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookStatic() {
return bookStatic;
}
public void setBookStatic(String bookStatic) {
this.bookStatic = bookStatic;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
book-main类:
package main;
import java.util.ArrayList;
import java.util.Scanner;
import bean.book;
public class bookmain {
public void setbook(ArrayList bolist){
System.out.println("请依次填写所要添加书籍的 编号 书名 作者 类型 数量");
Scanner sc=new Scanner(System.in);
book bo=new book();
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("添加成功");
}
public void findbook(ArrayList bolist){
System.out.println("请输入要查询的书名");
System.out.println("书籍编号 名称 作者 类型 数量");
Scanner sc=new Scanner(System.in);
String bookName=sc.next();
for(int i=0;i<bolist.size();i++){
book bo=(book)bolist.get(i);
if(bo.getBookName().equals(sc.next())){
System.out.println(bo.getId()+" "+bo.getBookName()+" "+
bo.getAuthor()+" "+bo.getType()+" "+
bo.getNumber());
}
}
}
public void show(ArrayList bolist){
System.out.println("书籍编号 名称 作者 类型 数量");
for(int i=0;i<bolist.size();i++){
book bo=(book)bolist.get(i);
System.out.println(bo.getId()+" "+bo.getBookName()+" "+
bo.getAuthor()+" "+bo.getType()+" "+
bo.getNumber());
}
}
}
bookManagermain类:
package main;
import java.util.ArrayList;
import java.util.Scanner;
public class bookManagermain {
public static void main(String[] args){
System.out.println("》》》》》》欢迎来到图书管理系统《《《《《《");
ArrayList bolist=new ArrayList();
ArrayList owlist=new ArrayList();
while(true){
System.out.println("请选择您将要进行的操作");
System.out.println("1,添加书籍 2,搜索书籍 3,查看图书");
System.out.println("4,借阅书籍 5,归还书籍 6,查看借阅信息 7,退出");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
if(a==1){
bookmain bm=new bookmain();
bm.setbook(bolist);
}else if(a==2){
bookmain bm=new bookmain();
bm.findbook(bolist);
}else if(a==3){
bookmain bm=new bookmain();
bm.show(bolist);
}else if(a==4){
borrowmain bm=new borrowmain();
bm.add(owlist, bolist);
}else if(a==5){
borrowmain bm=new borrowmain();
bm.Return(owlist, bolist);
}else if(a==6){
borrowmain bm=new borrowmain();
bm.show(owlist);
}else {
break;
}
}
}
}
Borrow-main类:
package main;
import java.util.ArrayList;
import java.util.Scanner;
import bean.book;
import bean.borrow;
public class borrowmain {
public void add(ArrayList owlist,ArrayList bolist){
System.out.println("请输入 编号 书名 姓名 时间");
borrow bo=new borrow();
Scanner sc=new Scanner(System.in);
bo.setId(sc.nextInt());
bo.setBookName(sc.next());
bo.setUserName(sc.next());
bo.setTime(sc.next());
owlist.add(bo);
bo.setBookStatic("借阅中");
for(int i=0;i<bolist.size();i++){
book boo=(book)bolist.get(i);
if(boo.getBookName().equals(sc.next())){
boo.setNumber(boo.getNumber()-1);
System.out.println("借阅成功");
}
}
}
public void show(ArrayList owlist){
System.out.println("编号 书名 姓名 时间 状态");
for(int i=0;i<owlist.size();i++){
borrow bo=(borrow)owlist.get(i);
System.out.println(bo.getId()+" "+bo.getBookName()+" "+bo.getUserName()+" "+bo.getTime()+" "+bo.getBookStatic());
}
}
public void Return(ArrayList owlist,ArrayList bolist){
System.out.println("请输入 书名 ");
Scanner sc= new Scanner(System.in);
System.out.println("编号 书名 姓名 时间 状态");
for (int i=0;i<owlist.size();i++){
borrow bo=(borrow)owlist.get(i);
if(bo.getBookName().equals(sc.next())){
System.out.println(bo.getId()+" "+bo.getBookName()+" "+bo.getUserName()+" "+bo.getTime()+" "+bo.getBookStatic());
}
}
for (int i=0;i<bolist.size();i++){
book bo=(book)bolist.get(i);
if(bo.getBookName().equals(sc.next())){
bo.setNumber(bo.getNumber()+1);
System.out.println("归还成功");
}
}
}
}
总体设计
“图书管理系统”系统设计用包图描述,如图所示。
“图书管理系统”系统设计用包图描述,如图所示。
图书管理系统动态模型如下图所示:
图书管理系统动态模型
系列图
借阅者查询书籍信息的时序图如下图所示:
数据需求:要查询的图书名称
图书管理员处理书籍借阅的时序图如下图5-3所示:
系统管理员删除书目的时序图如下图所示:
数据需求:
书目信息
主流程:
a) 系统管理员向系统提交要删除的书目
b) 系统查找此书目
c) 系统查找此书目下的所有拷贝
d) 系统删除此书目的所有拷贝
e) 系统删除此书目
系统管理员添加借阅者帐户的时序图如下图所示:
数据需求:
读者详细资料
主流程:
a) 系统管理员填写新读者的信息
b) 2.提交信息,创建读者信息保存到数据文件
系统管理员添加书籍的时序图如下图所示:
数据需求:
书目信息
每本书的拷贝的详细资料
主流程描述:
a) 系统管理员向系统提交新书资料(additem());
b) 系统查询与此书相关的书目;
c) 系统返回查询结果;
d) 查到书目,则提交,添加此书目的拷贝。
图书管理系统活动图
借阅者的活动图如下图所示:
图书管理员的活动图如下图所示:
a) 图书管理员登录系统后,处理日常事务,比如处理读者还书,借书;
b) 在处理还书时,系统会计算读者的还书期限是否过期,如果过期,则要交一定的罚金,并且更新借阅信息;
c) 处理借书时,系统会验证此读者借书的数量是否超过了限制,如果超过最大可借书的数目时,拒绝继续借书。
系统管理员维护借阅者帐户的活动图如下图所示:
a) 系统管理员运行图书管理系统,在登录界面上输入口令后,系统对用户进行验证,只有通过系统验证后,才能进行管理.否则推出系统;
b) 通过系统验证后,进入管理主界面,可以对借阅者进行管理;
c) 查看借阅者的相关信息,以保证借阅者信息的正确性;
d) 可以为读者注册资料,使其能通过系统借书,更新读者的资料。
系统管理员进行书目信息维护的活动图如下图所示
a) 系统管理员运行图书管理系统,在登录界面上输入口令后,系统对用户进行验证,只有通过系统验证后,才能进行管理.否则退出系统;
b) 通过验证后,系统管理员可以对书目进行管理,购买了新书后,需要向系统增加新的书目信息;
c) 查询书目信息,对图书资料进行全局管理和监督;
d) 图书过时后,需要删除相关资料,保证数据的正确。
系统管理员维护书籍信息的活动图如下图所示:
系统管理员登录系统,输入口令,系统进行验证,验证通过后,才可以使用系统,否则系统拒绝.
登录后,系统管理员可以对图书进行一些管理,比如增加图书,删除图书,操作完成后,退出系统.