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) 圖書過時後,需要刪除相關資料,保證資料的正確。
系統管理員維護書籍資訊的活動圖如下圖所示:
系統管理員登入系統,輸入口令,系統進行驗證,驗證通過後,才可以使用系統,否則系統拒絕.
登入後,系統管理員可以對圖書進行一些管理,比如增加圖書,刪除圖書,操作完成後,退出系統.