图书馆信息管理系统(项目实现)

简介: 图书馆信息管理系统(项目实现)

一、项目需求和计划

项目需求和计划

二、项目设计

项目设计

三、设备要求

       根据图书馆管理系统项目的需求背景陈述,可以确定本项目分为客户端和管理端,客户端主要功能是提供借阅者的图书信息查询、借阅图书、归还图书等。管理端的功能提供图书管理员和系统管理员两类人使用。图书管理员能更好的对于读者信息、图书信息进行查看、增加、修改、删除。系统管理员能更好的管理图书馆信息和图书管理员信息。它们的关系如图45所示。

3.1 系统运行的网络环境要求

       本系统的网络拓扑结构图如图46所示,无论是客户端的借阅者还是管理端的管理用户都可以通过网络登录到本系统中。借阅者可以通过网络查询图书的相关信息,进行借阅图书或者归还图书等功能,图书管理员通过网络对于借阅者借阅信息进行管理。管理端的系统管理员需要设置管理端的用户以及相应的权限。

图46网络拓扑结构图

3.2 系统运行的硬件环境要求

本系统的硬件环境如下:

借阅者使用的电脑:

普通PC
CPU P100GHz
内存 256MB以上
支持版本 能够运行IE5.0以上或者Netscape4.0以上版本的机器
分辨率 推荐使用1024×768像素

管理员使用电脑:

普通电脑
CPU P100GHz
内存 512MB以上
支持版本 能够运行IE5.0以上或者Netscape4.0以上版本的机器
分辨率 推荐使用1024×768像素
Web服务器
CPU P100GHz
内存 2G以上
硬盘 100GB以上
网卡 KMb/s速度
数据库服务器
CPU P100GHz
内存 2GB以上

硬盘

硬盘 100GB以上

3.3 系统运行软件环境要求

本系统的软件环境如下:

操作系统 中文Windows10
数据库 SQL Server 2000
开发工具包 JDK,java
Web服务器 Tomcat
浏览器 Windows

四、项目实现过程

4.1 基于Java环境的系统功能分析以及其代码实现

第一步:创建一个BOOK类来定义图书
    public class Book {
    private String bookName;
    private String authorName;
    private double price;
    private String type;
    private boolean isBorrowed;
    public Book(String bokName, String authorName, double price, String type) {
        this.bookName = bokName;
        this.authorName = authorName;
        this.price = price;
        this.type = type;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bokName) {
        this.bookName = bokName;
    }
    public String getAuthorName() {
        return authorName;
    }
    public void setAuthorName(String authorName) {
        this.authorName = authorName;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public boolean isBorrowed() {
        return isBorrowed;
    }
    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
    @Override
    public String toString() {
        return "Book{" +
                "bookName='" + bookName + '\'' +
                ", authorName='" + authorName + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                (isBorrowed ? " 已借出" : " 未借出") +
                '}';
    }
第二步:创建一个BookList类来定义具体有什么图书
    public class BookList {
    private Book[] books;
    private int BookUseSize;
    public BookList() {
        books = new Book[5];
        books[0] = new Book("三国演义", "施耐庵", 68.8, "小说");
        books[1] = new Book("水浒传", "罗贯中", 56.6, "小说");
        books[2] = new Book("西游记", "吴承恩", 60, "小说");
        this.BookUseSize = 3;
    }
    public void setBooks(int i, Book book) {
        if (i >= books.length) {
            expansion();
        }
        books[i] = book;
    }
    public Book getPosBooks(int i) {
        return books[i];
    }
    public void setBooksUseSize(int i) {
        this.BookUseSize = i;
    }
    public int getBooksUseSize() {
        return this.BookUseSize;
    }
    public void expansion() {
        books = Arrays.copyOf(books, 2 * books.length);
    }
第三步:创建和用户相关的类(也就是使用者)
   创建User也就是父类的特征
   public abstract class User {
 
    protected String userName;
 
    public User(String userName) {
        this.userName = userName;
    }
}
    创建管理员,来管理图书书籍
    public class Administrator extends User {
 
    public Administrator(String userName) {
        super(userName);
    }
}
   创建普通用户,继承父类Users
   public class GeneralUser extends User {
   public GeneralUser(String userName) {
        super(userName);
    }
}
第四步:创建一切程序的入口,也就是我们系统的主类
import Book.BookList;
import User.User;
import User.Administrator;
import User.GeneralUser;
import java.util.Scanner;
public class Main {
    public static User login() {
        System.out.println("请输入你的姓名:>");
        Scanner scanner = new Scanner(System.in);
        String userName = scanner.nextLine();
 
        while (true) {
            System.out.println("请输入你的身份:> 1,管理员 0,普通用户");
            int choice = scanner.nextInt();
 
            if (choice == 1) {
                return new Administrator(userName);//发生多态
            } else if (choice == 0) {
                return new GeneralUser(userName);//发生多态
            } else {
                System.out.println("选择错误,请重新选择:>");
            }
        }
    }
    public static void main(String[] args) {
        User user = login();
    }
 
第五步:创建菜单包实现抽象类定义的接口
public class Administrator extends User {
    public Administrator(String userName) {
        super(userName);
 
    }
    public int menu() {
        System.out.println("====hello," + super.userName + " welcome====");
        System.out.println("1,查找图书");
        System.out.println("2,新增图书");
        System.out.println("3,删除图书");
        System.out.println("4,显示图书");
        System.out.println("0,退出系统");
        System.out.println("请输入你的操作:>");
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }
}
2、GeneralUser类(2/3)
public class GeneralUser extends User {
    public GeneralUser(String userName) {
        super(userName);
    }
    public int menu() {
        System.out.println("====hello," + super.userName + " welcome====");
        System.out.println("1,查找图书");
        System.out.println("2,借阅图书");
        System.out.println("3,归还图书");
        System.out.println("0,退出系统");
        System.out.println("请输入你的操作:>");
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }
}
3、User类
public abstract class User {
 
    protected String userName;
 
    public User(String userName) {
        this.userName = userName;
    }
    public abstract int menu()}
最后一步:函数针对我们系统实现其六大功能
1、新增图书AddOperation类
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("==新增图书==");
        addBookOperation(bookList);
    }
    public void addBookOperation(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入书名:>");
        String bookName = scanner.nextLine();
        System.out.println("请输入作者名:>");
        String authorName = scanner.nextLine();
        System.out.println("请输入书的类型:>");
        String type = scanner.nextLine();
        System.out.println("请输入书的单价:>");
        Double price = scanner.nextDouble();
        Book book = new Book(bookName, authorName, price, type);
        int currentSize = bookList.getBooksUseSize();
        bookList.setBooks(currentSize, book);
        bookList.setBooksUseSize(currentSize + 1);
        System.out.println("新增成功!");
    }
}
2、展示图书DisplayOperation类
package Operation;
import Book.BookList;
public class DisplayOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("==展示图书==");
        displayBooksOperation(bookList);
    }
    public void displayBooksOperation(BookList bookList) {
        int currentSize = bookList.getBooksUseSize();
        for (int i = 0; i < currentSize; i++) {
            System.out.println(bookList.getPosBooks(i));
        }
    }
}
3、查找图书FindOperation类
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("==查找图书==");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入查找的方式:> 1,按书名查找 0,按作者查找");
        int find = scan.nextInt();
        scan.nextLine();
        String[] howToFind = new String[] {"作者名", "书名"};
        System.out.println("请输入你要查找的" + howToFind[find] +":>");
        String bookName = scan.nextLine();
        int result = findBooksOperation(bookList, bookName, find);
        if (result == -1) {
            System.out.println("未找到该书!");
            return;
        }
        System.out.println(bookList.getPosBooks(result));
    }
    public int findBooksOperation(BookList bookList, String bookName, int mark) {
        int currentSize = bookList.getBooksUseSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getPosBooks(i);
            if (mark == 1 && book.getBookName().equals(bookName)) {
                return i;
            }
            if (mark == 0 && book.getAuthorName().equals(bookName)) {
                return i;
            }
        }
        return -1;
    }
    public int findBooksOperation(BookList bookList, String bookName) {
        int currentSize = bookList.getBooksUseSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getPosBooks(i);
            if (book.getBookName().equals(bookName)) {
                return i;
            }
        }
        return -1;
    }
}
4、借阅图书BorrowOperation类和归还图书ReturnOperation类
package Operation;
import Book.BookList;
import BookBook;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
 
    @Override
    public void work(BookList bookList) {
        System.out.println("==借阅图书==");
        borrowBookOperation(bookList);
    }
    public void borrowBookOperation(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("请输入要借阅的书名:>");
        String borrowBookOperation = scanner.nextLine();
 
        FindOperation findOperation = new FindOperation();
        int findResult = findOperation.findBooksOperation(bookList, borrowBookOperation);
        if (findResult == -1) {
            System.out.println("没有此书信息!");
            return;
        }
 
        Book book = bookList.getPosBooks(findResult);
        book.setBorrowed(true);
        System.out.println("已借出!");
    }
}
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("==归还图书==");
        returnBookOperation(bookList);
    }
    public void returnBookOperation(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("请输入要归还的书名:>");
        String returnBookOperation = scanner.nextLine();
 
        FindOperation findOperation = new FindOperation();
        int findResult = findOperation.findBooksOperation(bookList, returnBookOperation);
        if (findResult == -1) {
            System.out.println("没有此书信息!");
            return;
        }
 
        Book book = bookList.getPosBooks(findResult);
        book.setBorrowed(false);
        System.out.println("已归还!");
    }
}
5、删除图书DelOperation类
package Operation;
import Book.BookList;
import Book.Book;
import java.util.Scanner;
public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书");
        delBookOperation(bookList);
    }
    public void delBookOperation(BookList bookList) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入要删除的书名:>");
        String delName = scan.nextLine();
 
        FindOperation find = new FindOperation();
        int result = find.findBooksOperation(bookList, delName);
        if (result == -1) {
            System.out.println("没有此书信息!");
            return;
        }
        int currentSize = bookList.getBooksUseSize();
        int i = 0;
        for (i = result; i < currentSize - 1; i++) {
            Book book = bookList.getPosBooks(i + 1);
            bookList.setBooks(i, book);
        }
        bookList.setBooks(i,null);
        bookList.setBooksUseSize(currentSize - 1);
        System.out.println("已删除!");
    }
}
6、退出系统ExitOperation类
package Operation;
import Book.BookList;
public class ExitOperation implements IOperation{
 
    @Override
    public void work(BookList bookList) {
        System.out.println("==退出系统==");
        System.out.println("你已经退出");
        System.exit(0);
        int currentSize = bookList.getBooksUseSize();
        for (int i = 0; i < currentSize; i++) {
            bookList.setBooks(i, null);
        }
    }
}

4.2 基于SQLSERVER环境的系统功能分析以及其数据库的搭建

图书信息表t_book

字段英文名称 列名 数据类型 字段约束 可否为空
Book_id 图书编号 varchar(15) 主键
Type_id 类别编号 varchar(10) 外键
Type_name 类别名称 varchar(20) 外键
Book_name 书名 varchar(20)
Book_writer 作者 varchar(10)
Book_company 出版社 varchar(20)
Book_date 出版日期 datetime
Book_brief 简介 varchar(100)

学生信息表t_student

字段英文名称 列名 数据类型 字段约束 可否为空
Stu_id 学号 varchar(15) 主键
Stu_name 姓名 varchar(10)
Stu_pwd 密码 varchar(20)
Stu_sex 性别 varchar(2)
Stu_tel 联系电话 varchar(15)
Borrow_num 借书数量 number(2) 默认为0
Stu_Depart 所在院系 varchar(10)

管理员信息表t_admin

字段英文名称 列名 数据类型 字段约束 可否为空
Admin_id 工作号 number(5) 主键
Admin_name 姓名 varchar(10)
Admin_pwd 密码 varchar(20)

借阅信息表 t_borrow_student

字段英文名称 列名 数据类型 字段约束 可否为空
Book_id 图书编号 varchar(15) 外主键
Stu_id 学生学号 varchar(15) 外主键
Borrow_date 借阅日期 datetime
Return_date 还书日期 datetime
renew 是否续借 varchar(2)

图书类别信息表 t_book_type

字段英文名称 列名 数据类型 字段约束 可否为空
Type_id 类别编号 varchar(10) 外主键
Type_name 类别名称 varchar(20) 外主键

SQL语句创建表

代码如下:

create table t_book_type(--图书类别信息表 t_book_type
  Type_id     varchar(10) not null,         --类别编号
  Type_name   varchar(20) not null,         --类别名称
  primary key(Type_id ,type_name)
)
create table t_book(--图书信息表t_book
  Book_id     varchar(15) not null primary key,   --图书编号
  Type_id     varchar(10) not null,       --类别编号
  Type_name   varchar(20) not null,       --类别名称
  Book_name   varchar(20) not null,       --书名
  Book_writer   varchar(10) not null,       --作者
  Book_company      varchar(20),          --出版社
  Book_date       datetime,           --出版日期
  Book_brief    varchar(100),         --简介
  Book_price    float   not null,       --价格
  foreign key(Type_id,Type_name) references t_book_type(Type_id,Type_name)
)
create table t_student(--学生信息表t_student
  Stu_id      varchar(15) not null,                 --学号
  Stu_name        varchar(10) not null,                 --姓名
  Stu_pwd     varchar(20) not null,                 --密码
  Stu_sex     varchar(2) not null  check(Stu_sex='男' or Stu_sex='女'),   --性别
  Stu_tel     varchar(15),                    --联系电话
  Borrow_num    numeric(2,0) not null default 0 ,       --表示默认值为0--借书数量
  Stu_Depart    varchar(10) not null,                 --所在院系
  Stu_liberty_id      varchar(6) not null,                  --借书证号
  primary key(Stu_id,Stu_liberty_id)
)
create table t_admin(--管理员信息表t_admin
  Admin_id        numeric(5,0) not null primary key,  --工作号
  Admin_name    varchar(10) not null,       --姓名
  Admin_pwd   varchar(20) not null        --密码
)
create table t_borrow_student(--借阅信息表 t_borrow_student
  Book_id     varchar(15) not null,       --图书编号
  Stu_id      varchar(15) not null,       --学生学号
  Borrow_date   datetime not null,        --借阅日期
  Return_date   datetime not null,        --还书日期
  renew     varchar(2) not null,        --是否续借
  Stu_liberty_id      varchar(6) not null,        --借书证号
  primary key(Book_id,Stu_id),
  foreign key(Book_id) references t_book(Book_id),
  foreign key(Stu_id,Stu_liberty_id) references t_student(Stu_id,Stu_liberty_id)
)

图47图书信息管理系统数据库里面创建的表

insert into t_book_type(Type_id,Type_name)--图书类别信息表
  values  ('T00001','计算机类'),
      ('T00002','中国文学'),
      ('T00003','外国文学'),
      ('T00004','数学类'),
      ('T00005','外国语类'),
      ('T00006','政治类'),
      ('T00007','天文类'),
      ('T00008','体育类'),
      ('T00009','自然科学类'),
      ('T00010','其他')
insert into t_book(Book_id,Type_id,Type_name,Book_name,Book_writer,Book_company,Book_date,Book_brief,Book_price,Book_num)--图书信息表
  values  ('B00001','T00001','计算机类','数据库系统原理','邓丽','广东电子出版社','2018-08-05','数据库介绍。',40,100),
      ('B00002','T00001','计算机类','java程序设计','周绍斌','广东电子出版社','2018-07-25','java学习',45,200),
      ('B00003','T00002','中国文学','文化苦旅','余秋雨','作家出版社','2012-06-01','探索中国文化的历史命运',34.5,100),
      ('B00004','T00002','中国文学','朝花夕拾','鲁迅','长江文艺出版社','2015-12-29','饱含着浓烈的抒情气息',20.39,100),
      ('B00005','T00003','外国文学','人间失格','太宰治','现代出版社','2016-10-05','人间失格。',45,100),
      ('B00006','T00003','外国文学','老人与海','海明威','国际文化出版公司','2016-11-05','外国文学。',20.5,100),
      ('B00007','T00004','数学类','高等数学','杨爱珍','上海财经大学出版社','2015-10-01','大学生必备数学知识。',29,100),
      ('B00008','T00005','外国语类','大学英语','陆琳','人民邮电出版社','2016-06-02','大学生必备英语知识。',35.6,100),
      ('B00009','T00006','政治类','毛泽东思想','刘琳','机械工业出版社','2014-05-09','学习新思想',45,100),
      ('B00010','T00004','数学类','线性代数','李黎','高等教育出版社','2016-07-28','大学生必备线性知识。',30.5,100)
insert into t_admin(Admin_id,Admin_name,Admin_pwd)--管理员信息表
  values  (1,'李恺','001'),
      (2,'李军','002'),
      (3,'张鸿涛','003'),
      (4,'文章','004'),
      (5,'詹文海','005'),
      (6,'李志勇','006'),
      (7,'梁宇飞','007'),
      (8,'周永波','008'),
      (9,'谢玉玉','009'),
      (10,'范文昊','010'),
      (11,'刘景页','011')
insert into t_student(Stu_id,Stu_name,Stu_pwd,Stu_sex,Stu_tel,Borrow_num,Stu_Depart,Stu_liberty_id)--学生信息表
  values  ('S00001','张羽','S00001','男','15620354789',0,'计算机学院','R00001'),
      ('S00002','李飞','S00002','女','13856214521',0,'计算机学院','R00002'),
      ('S00003','张三','S00003','男','14235689526',0,'外国语学院','R00003'),
      ('S00004','刘泳景','S00004','男','14785623584',0,'机械学院','R00004'),
      ('S00005','曹家俊','S00005','男','15623785123',0,'商管学院','R00005'),
      ('S00006','余大兔','S00006','女','17856241254',0,'法学院','R00006'),
      ('S00007','刘小青','S00007','女','14562358971',0,'医学院','R00007'),
      ('S00008','徐俊瑞','S00008','男','18554235561',0,'计算机学院','R00008'),
      ('S00009','刘千秋','S00009','男','15478620146',0,'计算机学院','R00009'),
      ('S00010','孙浩楠','s00010','男','14862395209',0,'数媒学院','R00010')
insert into publish(p_name,p_id)--出版社信息表
  values  ('现代出版社','10001'),
      ('作家出版社','10002'),
      ('长江文艺出版社','10003'),
      ('广东电子出版社','10004'),
      ('人民邮电出版社','10005'),
      ('高等教育出版社','10006'),
      ('机械工业出版社','10007'),
      ('国际文化出版公司','10008'),
      ('上海财经大学出版社','10009')
insert into t_borrow_student(Book_id,Stu_id,Borrow_date,Return_date,renew,Stu_liberty_id,overdue)--借阅信息表
  values  ('B00001','S00005','2018-10-15','2018-11-10','否','R00005','否'),
      ('B00002','S00009','2021-06-02','2021-07-01','否','R00009','否'),
      ('B00003','S00001','2018-09-10','2018-10-05','否','R00001','否'),
      ('B00004','S00007','2019-10-06','2019-11-05','否','R00007','否'),
      ('B00005','S00010','2016-05-25','2016-06-20','否','R00010','否'),
      ('B00006','S00002','2017-10-09','2017-11-06','是','R00002','否'),
      ('B00006','S00004','2017-11-06','2017-12-06','否','R00004','否'),
      ('B00007','S00008','2020-09-01','2020-10-01','否','R00008','否'),
      ('B00010','S00003','2019-11-15','2019-12-09','否','R00003','否'),
      ('B00010','S00006','2018-08-06','2018-09-06','否','R00006','否')

结果如下:

出版社信息表(Publish):

管理员信息表(t_admin):

图书类别信息表(t_book_type):

借阅信息表(t_borrow_student):

学生信息表(t_student):

五、项目测试

项目测试


目录
相关文章
|
12天前
|
SQL Java 数据库连接
基于SSM图书馆管理系统
基于SSM图书馆管理系统
30 1
|
1月前
|
前端开发 测试技术 数据安全/隐私保护
图书馆信息管理系统(项目测试)
图书馆信息管理系统(项目测试)
75 2
|
1月前
|
安全 测试技术 数据库
图书馆信息管理系统(总)(上)
图书馆信息管理系统(总)(上)
82 3
|
1月前
|
SQL 前端开发 测试技术
图书馆信息管理系统(总)(下)
图书馆信息管理系统(总)(下)
55 3
|
1月前
|
存储 编解码 Java
图书馆信息管理系统(总)(中)
图书馆信息管理系统(总)(中)
76 2
|
1月前
|
存储 编解码 测试技术
图书馆信息管理系统(项目需求和计划、项目设计)(下)
图书馆信息管理系统(项目需求和计划、项目设计)(下)
199 1
|
1月前
|
安全 测试技术 数据库
图书馆信息管理系统(项目需求和计划、项目设计)(上)
图书馆信息管理系统(项目需求和计划、项目设计)(上)
206 1
|
1月前
|
编解码 测试技术 数据库
图书馆管理系统系统分析与设计(上)
图书馆管理系统系统分析与设计(上)
74 0
|
1月前
|
安全 大数据 数据库
现代图书馆管理系统的设计与应用
现代社会信息量急剧增加,图书馆作为知识的仓库和传播中心,承载着重要的社会功能。随着科技的发展,传统的图书馆管理方式已经无法满足日益增长的需求,因此图书馆管理系统应运而生。本文将探讨图书馆管理系统的设计原理、功能特点以及应用效果,旨在为图书馆管理者提供参考,促进图书馆管理水平的提升。
216 0
|
1月前
|
Java
图书馆管理系统
图书馆管理系统
46 2