《Java》图书管理系统(已升级)
目录
这是一个对于Java中知识点的类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习,对于实际的图书管理系统还需要一点的优化
前言
效果展示
我们先来看看效果
首先是我们的管理员端:
再下是我们的普通用户端:
功能模块
我们先试着模块化出来功能合计
简单的登录
管理端
·查阅图书
·增加图书
·删除图书
·打印图书
·退出系统
用户端
·查阅图书
·借阅图书
·归还图书
·退出
我们先将类中的功能创建好
IOperation为我们所有功能的接口 很多童鞋就疑惑为何要这么做,我们直接将其定义到一个类中不可以吗,答案是可以的!,但是我们为了链接知识点 所以将其进行分化!
书架
定义书的类
我们先来定义一个书的类,首先一本书有书名、作者、价格、类型以及是否已被借出
public class Book { private String name;//书名 private String author;//作者 private int price;//价格 private String type;//类型 private boolean isBorrwed;//是否借出}
因为这些都是private类型 所以我们还需要提供一个方法来提供给使用者来调用
教大家快捷方法为Alt+Insert
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 isBorrwed() { return isBorrwed; } public void setBorrwed(boolean borrwed) { isBorrwed = borrwed; } @Override public String toString() { return "book{" + " 书名='" + name + '\'' + ", 作者='" + author + '\'' + ", 价格=" + price + ", 类型='" + type + '\'' + ((isBorrwed==true)?", 已被借出":", 未被借出") + '}'; }
创建书架
我们创建一个BookList类当做书架,用来存放我们的书籍
public class BookList { private Book[] books=new Book[10]; private int BookSize; public BookList(){ books[0]=new Book("三国演义","罗贯中",17,"小说"); books[1]=new Book("西游记","吴承恩",47,"小说"); books[2]=new Book("水浒传","施耐庵",37,"小说"); this.BookSize=3; } public int getBookSize() { return BookSize; } public void setBookSize(int bookSize) { BookSize = bookSize; } public Book getpos(int pos){ return books[pos]; } public void setBooks(int pos,Book book){ this.books[pos]=book; }}
我们现在可以看到已经对书架进行了初始化,现在书架上的书有三国演义、西游记、水浒传
用户
User用户类
我们要使用User来实现多态继承
public abstract class User { protected String name; protected IOperation[] iOperations; public User(String name){ this.name=name; } public abstract int menu(); public void dowork(int choice, BookList bookList){ iOperations[choice].work(bookList); }}
AdminUser管理员
管理员要实现的功能为查找、新增、删除、打印、退出系统
public class AdminUser extends User{ public AdminUser(String name){ super(name); this.iOperations =new IOperation[]{ new Exitoperation(), new Findoperation(), new Addoperation(), new Deloperation(), new Displayoperation() }; } public int menu(){ System.out.println("=======管理员菜单======="); System.out.println("Hai!"+this.name+" 欢迎来到图书馆"); 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(); }}
AdminUser类继承了User用户类,并且实现了管理员对应的功能
NormalUser普通用户
普通用户要实现的功能为查找、借阅、归还、退出系统
public class NormalUser extends User { public NormalUser(String name){ super(name); this.iOperations =new IOperation[]{ new Exitoperation(), new Findoperation(), new Borrowoperation(), new Retoperation() }; } public int menu(){ System.out.println("=======用户菜单======="); System.out.println("Hai!"+this.name+" 欢迎来到图书馆"); 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(); } }
功能
接口
public interface IOperation { Scanner scanner=new Scanner(System.in); public void work(BookList bookList);}
FindOperation 查找图书
我们此功能实现是非常简单的,保存好用户要查找的图书并且使用类name.equals()来查找图书即可
public class Findoperation implements IOperation{ public void work(BookList booklist) { System.out.println("查找图书"); System.out.println("请输入你要查找的书名"); String name=scanner.nextLine(); int size=booklist.getBookSize(); for (int i = 0; i < size; i++) { Book book= booklist.getpos(i); if(name.equals(book.getName())){ System.out.println("找到了你要查找的书 信息如下"); System.out.println(book); return ; } } System.out.println("没有找到你要查找的书"); }}
AddOperation添加图书
我们要给已存在的书架加入一本书,将新书存放到顺序表之后即可
public class Addoperation implements IOperation{ public void work(BookList booklist) { System.out.println("添加图书"); 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.getBookSize(); booklist.setBooks(size,book); booklist.setBookSize(++size); System.out.println("新增图书成功"); }}
需要注意的地方是我们一定要切记添加图书后记得要改变bookSize的值
DelOperation删除图书
此功能的实现与查找类似,在查找的基础上增加了删除,需要用到的知识点为顺序表的删除,删除需要将后续的书前移,并且将最后一个置为 空
public class Deloperation implements IOperation{ public void work(BookList booklist) { System.out.println("删除图书"); System.out.println("请输入要删除的图书的名字"); String name=scanner.nextLine(); int size= booklist.getBookSize(); for (int i = 0; i < size; i++) { Book book= booklist.getpos(i); if(name.equals(book.getName())){ while(i
切记将书架的最后一位置为空避免泄露,需要注意到的还是要将bookSize的值进行修改
BorrowOperation借阅图书
首先利用查找的原理找到我们要寻找的书,找到后修改其状态即可
public class Borrowoperation implements IOperation { public void work(BookList booklist) { System.out.println("借阅图书"); System.out.println("请输入你要借的书名"); String name=scanner.nextLine(); int size=booklist.getBookSize(); for (int i = 0; i
需要注意的是记得将要借阅的书类型修改为true
DisOperation 打印图书
按照顺序表原理依次打印即可
public class Displayoperation implements IOperation{ public void work(BookList booklist) { System.out.println("打印图书"); int size= booklist.getBookSize(); for (int i = 0; i < size; i++) { Book book= booklist.getpos(i); System.out.println(book); } }}
RetOperation归还图书
首先要查找书库是否存在此书,如果存在将其类型修改为false
public class Retoperation implements IOperation{ public void work(BookList booklist) { System.out.println("归还图书"); System.out.println("请输入你要归还的书名"); String name=scanner.nextLine(); int size=booklist.getBookSize(); for (int i = 0; i
ExitOperation退出系统
退出系统
public class Exitoperation implements IOperation{ public void work(BookList booklist) { System.out.println("退出系统"); System.exit(0); }}
整合
我们需要使用Main来将所有的功能进行串联
public class Main { public static User login(){ System.out.println("请输入你的姓名"); Scanner scanner=new Scanner(System.in); String name=scanner.next(); System.out.println("请输入你的身份 1--》管理员 0--》普通用户"); int choice=scanner.nextInt(); if(choice==1){ return new AdminUser(name); }else if(choice==0) { return new NormalUser(name); } else { System.out.println("输入错误,退出系统"); return null; } } public static void main(String[] args) { BookList bookList=new BookList(); User user=login();//发生了向上转型 while(true){ int choice=user.menu();//发生了动态绑定 多态 //根据choice调用合适的操作 user.dowork(choice,bookList); } }}
我们来看一下代码写完之后的所有文件
总结
我们现在实现的还是比较简易的,后期将结合MySQL来进行优化,并且在代码实现中也有很多业务上的处理没有实现,后期将会进行修正,感谢大家的支持
升级
我们对本图书馆进行了升级,升级内容如下
管理员系统:
用户系统:
升级后的目录
对于其他的升级都是次要的 ,来重点讲解一下使用类型排序,首先我们分析到对于数据的排序是使用到方法Arrays.sort(),但是对于我们Book的排序呢,首先我深入研究了一下sort排序内部,发现 他是在依靠c来实现排序
以下代码为JDK内置排序原码
public static
void sort(T[] a, int fromIndex, int toIndex, Comparator super T> c) { if (c == null) { sort(a, fromIndex, toIndex); } else { rangeCheck(a.length, fromIndex, toIndex); if (LegacyMergeSort.userRequested) legacyMergeSort(a, fromIndex, toIndex, c); else TimSort.sort(a, fromIndex, toIndex, c, null, 0, 0); } } 我们进入Comparator来观察一下
我们发现它是一个接口 我来给大家解读一下
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
比较它的两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回一个负整数、零或正整数。
我们可以得到 这个接口为一个公共接口比较器
,所以我们可以得到,通过类接入接口我们就可以做一个属于自己的比较器!有了以上分析 开搞
class A implements Comparator
{ @Override public int compare(Book o1, Book o2) { int a= o1.getType().compareTo(o2.getType()); return a; }} 搞好这个比较器类型就可以实现一下我们的图书整理功能了(使用书的其他类型也可以实现,可以加入多个比较器)
public class Finishing implements IOperation{ @Override public void work(BookList booklist) { A a=new A(); System.out.println("整理图书(按照类型)"); Arrays.sort(booklist.books,0,booklist.getBookSize(),a); System.out.println("整理完成!"); }}
这样便实现了我们的图书整理功能,再接入给管理员用户就可以使用啦
ps:其他功能实现起来非常简单,稍加分析即可写入 就不做讲解了,很多老铁想让我发一下所有源码,满足老铁们
源码 (更新后的)(绿色为包名,紫色为类,橙色为接口)
BookList
Book
package BoolList;public class Book { private String name;//书名 private String author;//作者 private String type;//类型 private int price;//价格 private boolean isBorrwed;//状态 public Book(String name, String author, int price , String type ) { this.name = name; this.author = author; this.type = type; this.price = price; } public String getType() { return type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isBorrwed() { return isBorrwed; } public void setBorrwed(boolean borrwed) { isBorrwed = borrwed; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", type='" + type + '\'' + ", price=" + price + (isBorrwed==true?"已被借出":"未被借出")+ '}'; }}
BookList
package BoolList;public class BookList { public Book[] books=new Book[10]; private int BookSize=0; public BookList() { books[0]=new Book("三国演义","罗贯中",17,"小说"); books[1]=new Book("西游记","吴承恩",47,"小说"); books[2]=new Book("水浒传","施耐庵",37,"小说"); BookSize=3; } public void setBooks(int pos,Book books) { this.books[pos]=books; } public Book getBooks(int pos) { return books[pos]; } public int getBookSize() { return BookSize; } public void setBookSize(int bookSize) { BookSize = bookSize; }}
Main
Main
package Main;import BoolList.Book;import BoolList.BookList;import User.*;import java.util.Scanner;public class Main { public static User func(){ System.out.println("欢迎来到冰激凌图书馆!"); System.out.println("请问怎么称呼您?"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); System.out.println("请问您的身份为? 1-》管理员 0-》普通用户"); int usersize=scanner.nextInt(); if(usersize==1){ return new Administratoruser(name); }else { return new Ordinaryuser(name); } } public static void main(String[] args) { Needtoknow(); BookList bookList=new BookList(); User user=func(); while(true){ int count=user.mune(); user.dowork(count,bookList); } } public static void Needtoknow(){ System.out.println("**************************"); System.out.println(" 入馆需知(新)"); System.out.println("本图书馆开放时间为9.00-24.00"); System.out.println("**************************"); }}
Operation
IOperation
import BoolList.BookList;public interface IOperation { public void work(BookList booklist);}
AddOperation
package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class AddOperation implements IOperation { @Override public void work(BookList booklist) { System.out.println("新增图书"); System.out.println("请输入图书的名字"); Scanner scanner=new Scanner(System.in); 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.getBookSize(); booklist.setBooks(size,book); booklist.setBookSize(++size); System.out.println("新增图书成功"); }}
BorrowOperation
package Operation;import BoolList.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation{ @Override public void work(BookList booklist) { System.out.println("借阅图书"); System.out.println("请输入你要借阅的书名 例如:三国演义"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); int siz=booklist.getBookSize(); for (int i = 0; i < siz; i++) { if(name.equals(booklist.getBooks(i).getName())){ booklist.getBooks(i).setBorrwed(true); System.out.println("成功借阅 ,现在图书信息如下:"); System.out.println(booklist.getBooks(i)); return ; } } System.out.println("未找到你要查找的书!!!"); }}
DelOperation
package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class DelOperation implements IOperation{ @Override public void work(BookList booklist) { System.out.println("删除图书"); System.out.println("请输入你要删除的书名 例如:三国演义"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); for (int i = 0; i < booklist.getBookSize();i++) { if(name.equals(booklist.getBooks(i).getName())){ while(i
DisOperation
package Operation;import BoolList.Book;import BoolList.BookList;public class DisOperation implements IOperation{ @Override public void work(BookList booklist) { System.out.println("打印图书"); int ret= booklist.getBookSize(); for (int i = 0; i
ExitOperation
package Operation;import BoolList.Book;import BoolList.BookList;public class ExitOperation implements IOperation{ @Override public void work(BookList booklist) { System.out.println("退出登录"); System.exit(0); }}
FindOperation
package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class FindOperation implements IOperation{ @Override public void work(BookList booklist) { System.out.println("查询图书"); System.out.println("请输入你要查找的书名 例如:三国演义"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); for (int i = 0; i
FindType
package Operation;import BoolList.BookList;import java.util.Scanner;public class FindType implements IOperation{ @Override public void work(BookList booklist) { System.out.println("查询图书(类型查找)"); System.out.println("请输入你要查找的类型 例如:小说"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); int flg=0; System.out.println("查找信息如下:"); for (int i = 0; i
Notice
package Operation;import BoolList.BookList;import java.util.Scanner;public class Notice implements IOperation{ @Override public void work(BookList booklist) { System.out.println("*****************************"); System.out.println("图书馆通知栏:"); System.out.println("热烈祝贺二十大的召开!"); System.out.println("国家图书馆第十八届文津图书奖正式启动"); System.out.println("本图书馆开放时间为9.00-24.00"); System.out.println("*****************************"); }}
RetOperation
package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Scanner;public class RetOperation implements IOperation{ @Override public void work(BookList booklist) { System.out.println("归还图书"); System.out.println("请输入你要归还的书名 例如:三国演义"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); for (int i = 0; i
Finishing
package Operation;import BoolList.Book;import BoolList.BookList;import java.util.Arrays;import java.util.Comparator;class A implements Comparator { @Override public int compare(Book o1, Book o2) { int a= o1.getType().compareTo(o2.getType()); return a; }}public class Finishing implements IOperation{ @Override public void work(BookList booklist) { A a=new A(); System.out.println("整理图书(按照类型)"); Arrays.sort(booklist.books,0,booklist.getBookSize(),a); System.out.println("整理完成!"); }}
user
User
package User;import BoolList.Book;import BoolList.BookList;import Operation.IOperation;public abstract class User { protected String name; protected IOperation[] iOperations; public User(String name) { this.name = name; } public abstract int mune(); public void dowork(int pos, BookList book){ iOperations[pos].work(book); }}
Administratoruser
package User;import Operation.*;import java.util.Scanner;public class Administratoruser extends User{ public Administratoruser(String name) { super(name); this.iOperations= new IOperation[]{ new ExitOperation(), new FindOperation(), new FindType(), new AddOperation(), new DelOperation(), new DisOperation(), new Finishing() }; } @Override public int mune() { System.out.println("hello 尊敬的管理员:"+this.name+" 欢迎来到冰激凌图书馆"); System.out.println("======================"); System.out.println("1.查阅图书"); System.out.println("2.类型查找(新)"); System.out.println("3.增加图书"); System.out.println("4.删除图书"); System.out.println("5.显示图书"); System.out.println("6.整理图书(新)"); System.out.println("0.退出登录"); System.out.println("======================"); System.out.println("请输入您的操作"); Scanner scanner=new Scanner(System.in); int input=scanner.nextInt(); return input; }}
Ordinaryuser
package User;import Operation.*;import java.util.Scanner;public class Ordinaryuser extends User { public Ordinaryuser(String name){ super(name); this.iOperations=new IOperation[]{ new ExitOperation(), new FindType(), new BorrowOperation(), new RetOperation(), new Notice(), new DisOperation() }; } @Override public int mune() { System.out.println("=======用户菜单======="); System.out.println("hello 尊敬用户:"+this.name+" 欢迎来到冰激凌图书馆"); System.out.println("1.查找图书(类型)(新)"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("4.查看通知(新)"); System.out.println("5.查看书架(新)"); System.out.println("0.退出登录"); System.out.println("===================="); System.out.println("请输入您的操作:"); Scanner scanner=new Scanner(System.in); return scanner.nextInt(); }}
好了 !再次感谢各位支持
来源地址:https://blog.csdn.net/m0_69996872/article/details/127589425
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341