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

🌟欢迎来到 我的博客 —— 探索技术的无限可能!


🌟博客的简介(文章目录)


图书馆管理系统系统分析与设计
图书馆信息管理系统(项目需求和计划、项目设计)
图书馆信息管理系统(项目实现)
图书馆信息管理系统(项目测试)
图书馆信息管理系统(总)


一、项目需求和计划

项目需求和计划

二、项目设计

项目设计

三、设备要求

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

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

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

图46网络拓扑结构图

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

本系统的硬件环境如下:
借阅者使用的电脑:

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

管理员使用电脑:

普通电脑
CPUP100GHz
内存512MB以上
支持版本能够运行IE5.0以上或者Netscape4.0以上版本的机器
分辨率推荐使用1024×768像素
Web服务器
CPUP100GHz
内存2G以上
硬盘100GB以上
网卡KMb/s速度
数据库服务器
CPUP100GHz
内存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();
    }
}
2GeneralUser类(2/3public 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();
    }
}
3Userpublic abstract class User {
 
    protected String userName;
 
    public User(String userName) {
        this.userName = userName;
    }
    public abstract int menu()}

最后一步:函数针对我们系统实现其六大功能

1、新增图书AddOperationpackage 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、展示图书DisplayOperationpackage 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、查找图书FindOperationpackage 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类和归还图书ReturnOperationpackage 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、删除图书DelOperationpackage 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、退出系统ExitOperationpackage 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):
在这里插入图片描述

五、项目测试

项目测试

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
开发图书馆信息管理系统时,以下是一些关键技术可以考虑使用: 1. 编程语言:选择一种适合你的项目的编程语言,如C#, Java或Python。这些语言都有强大的面向对象编程支持和丰富的框架生态系统。 2. 数据库管理系统(DBMS):使用合适的DBMS来存储和管理图书馆信息。常见的选择有MySQL、PostgreSQL和Microsoft SQL Server。你可以使用SQL语言来查询和操作数据库。 3. 用户界面(UI)开发:使用用户友好的界面来展示图书馆信息,并与用户进行交互。你可以选择使用框架如ASP.NET、JavaFX或React来构建响应式和易于使用的界面。 4. 数据库设计:设计数据库模式来存储图书、用户、借阅记录等信息。使用关系数据库范式化设计原则来确保数据的一致性和完整性。 5. 身份验证和权限管理:实现用户身份验证和权限管理系统,以确保只有授权用户可以访问和修改图书馆信息。你可以使用身份验证库(如ASP.NET Identity或Spring Security)来简化此过程。 6. 数据存储和访问:使用适当的数据访问技术(如Entity Framework、Hibernate或Dapper)来处理数据的持久化和检索操作。 7. 借阅和归还管理:实现借阅和归还功能,包括借阅期限管理、罚款计算等。你可以使用定时任务或后台服务来处理到期提醒和罚款计算。 8. 搜索和过滤:提供用户搜索和过滤图书的功能,以便他们可以根据标题、作者、类别等快速找到所需的图书。可以使用全文搜索引擎(如Elasticsearch)来实现高效的搜索功能。 9. 报表和统计:生成各种报表和统计数据,如借阅记录、图书流通率等。你可以使用报表生成工具(如Crystal Reports或JasperReports)来生成报表。 10. 安全性和数据保护:确保图书馆信息的安全性和隐私保护。使用加密技术来保护敏感数据,并采取适当的安全措施来防止未经授权的访问和数据泄露。 这些是开发图书馆信息管理系统时可能涉及的关键技术。根据你的具体需求和技术栈选择适合的技术来实现你的项目

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZShiJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值