行业知识
图书管理系统(java) 代码展示和思路介绍 (9000字小长文)
2026-10-26 14:47:17
来源:互联网转载
前言:
这是本人基于面向对象的思想,利用java写的,用于练习的图书管理系统,代码和框架存在借鉴,本人并无获取利益的考虑,旨在分享和记录知识
框架与思路
作为一个图书管理系统,我们可以将它分成这个几个对象
1.书
书可以分为书籍信息和书架,前者负责储存书的信息,后者如字面意思,负责向使用者展示有多少书籍
2.用户
用户分为管理员和普通用户,前者要进入,还需要设置密码
3.操作
管理员和用户需要有不同的操作权限吗,用于查阅,增加,显示,借书和还书等操作
具体框架如截图
框架图
这里有个习惯不要学,类名开头字母要大写哦
"书籍"包的代码
首先是book
package Book;public class book{ private String name; private String author; private int price ; private String type; private boolean isBorrowed;//是否已经被借出 @Override public String toString() { return "book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ((isBorrowed==true?"已经被借出":"没有被借出"))+ '}'; } public book(String name, String author, int price, String type) { this.name = name; this.author = author; this.price = price; this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPrice() { return price; } public void setPrice(int 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; }} 代码作用:
负责建立书籍的相关信息,为了体现的专业点(封装),我用了private
值得一提的是
((isBorrowed==true?"已经被借出":"没有被借出"))+
这里运用的三目运算符,来体现书籍是否被借走
然后是书架
首先给各位看看代码的效果
boolean 默认是false,所以状态是没有被借出
说白了,book类也是一种数据类型,我们自然可以用数组来保存它,数组真的很有用
代码
package Book;import Book.book;public class booklist{ private book [] books; private int usedsize; public booklist() { this.books = new book[1000]; this.books[0]=new book("红楼梦","曹雪芹",20,"小说"); this.books[1]=new book("水浒传","施耐庵",20,"小说"); this.books[2]=new book("三国演义","罗贯中",21,"小说"); this.usedsize=3; } public int getUsedsize() { return usedsize; // 获得数组大小 } public void setUsedsize(int usedsize) { this.usedsize = usedsize; //改变数组大小 } public book getbook(int pos) { return books[pos]; // 负责展示书籍 } public void setbook(int pos,book abook) { books[pos]=abook; //放置书籍 }} 用户包——个人认为的难点
用户分为普通用户和管理员,那么他们肯定有两套界面,
如图所示
public int menu () { System.out.println("**********用户***********"); System.out.println("1.查找图书"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("4.显示图书"); System.out.println("0.退出系统"); System.out.println("*********************"); System.out.println("请输入你的操作:"); Scanner sc=new Scanner(System.in); int choice=sc.nextInt(); return choice; } public int menu () { System.out.println("*********管理员************"); System.out.println("1.查找图书"); System.out.println("2.增加图书"); System.out.println("3.删除图书"); System.out.println("4.显示图书"); System.out.println("0.退出系统"); System.out.println("*********************"); System.out.println("请输入你的操作:"); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); return choice; } 我们需要一个父类
package User;import Book.booklist;import operation.WORK;public abstract class Users{ protected String name; protected WORK[] Work; public Users(String name) { this.name = name; } @Override public String toString() { return "Users{" + "name='" + name + '\'' + '}'; } public abstract int menu (); public void Doop(int choice, booklist Booklist) { Work[choice].work(Booklist); }} QE:为什么要数组?
AW:因为不同的操作类也是一种引用数据,可以存在数组里面,然后通过输入下标调用
(说人话:调用WORK数组下标为choice的元素,实现其work方法)
在子类中重写
两个子类,代码分别如下
package User;import operation.*;import java.util.Scanner;public class Nomaluser extends Users{ public Nomaluser(String name) { super(name); this.Work=new WORK[]{new Exitop(),new Findop(),new Borrowop(),new Returnop(),new Show()}; } public int menu () { System.out.println("**********用户***********"); System.out.println("1.查找图书"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("4.显示图书"); System.out.println("0.退出系统"); System.out.println("*********************"); System.out.println("请输入你的操作:"); Scanner sc=new Scanner(System.in); int choice=sc.nextInt(); return choice; }} package User;import operation.*;import java.util.Scanner;public class Adminuser extends Users{ public Adminuser(String name) { super(name); this.Work=new WORK[]{new Exitop(),new Findop(),new Addop(),new Deleteop(),new Show()}; } public int menu () { System.out.println("*********管理员************"); System.out.println("1.查找图书"); System.out.println("2.增加图书"); System.out.println("3.删除图书"); System.out.println("4.显示图书"); System.out.println("0.退出系统"); System.out.println("*********************"); System.out.println("请输入你的操作:"); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); return choice; }} 操作包
增加操作
package operation;import Book.book;import Book.booklist;import java.util.Scanner;public class Addop implements WORK{ @Override public void work(booklist BOOKlist) { System.out.println("增加图书"); Scanner scanner=new Scanner(System.in); System.out.println("请输入您要添加的图书的书名:"); String name = scanner.nextLine(); System.out.println("请输入您要添加的图书的作者名:"); String author = scanner.nextLine(); System.out.println("请输入您要添加的图书的类型:"); String type = scanner.nextLine(); System.out.println("请输入您要添加的图书的价格:"); int price = scanner.nextInt(); book Book =new book(name,author,price,type); int size=BOOKlist.usedsize; for(int i=0;i