服务器之家

服务器之家 > 正文

java实现图书管理系统

时间:2021-08-31 11:42     来源/作者:颜问儿

本文通过实例为大家分享了java实现图书管理系统的具体代码,供大家参考,具体内容如下

一、背景介绍

通过一段时间java编程的学习,需要一个比较综合的实例来进行编程的练习,是一个对前段时间所学内容进行总合提升的一个契机。选择了图书管理系统,会用到的javaSE知识有:变量、包、继承、类、接口、循环结构等。是一个很综合的典例。

二、核心需求

1.用户可以登录到系统上 分为 管理员、普通用户两种角色,这两种不同的角色根据自己的身份可以实现不同的操作。

普通用户

a)查阅某个书籍的信息
b)借阅书籍
c)   归还书籍
d)退出程序

管理员

a)查阅某个书籍的信息
b)增加书籍
c)   删除书籍
d)查看书籍列表
e)退出程序

程序框架结构图

java实现图书管理系统

三、代码以及详解

1.User类

  1. package booksystem;
  2.  
  3. import booksystem.operation.IOperation;
  4.  
  5. abstract public class User {
  6. protected String name;//定义书名
  7. protected IOperation[] operations;//定义一个接口数组
  8. public abstract int menu();//是用户和管理员的父类,不进行实例化,所以定义为抽象方法
  9.  
  10. public void doOperation(int choice,BookList bookList){
  11. IOperation operation=this.operations[choice-1];
  12. operation.work(bookList);
  13. }
  14. }

User类是NormalUser类和Admin类的父类,由于不需要实例化,将menu()函数定义为了抽象函数。

2.NormalUser类

  1. package booksystem;
  2.  
  3. import booksystem.operation.*;
  4. import booksystem.operation.IOperation;
  5.  
  6. import java.util.Scanner;
  7.  
  8. public class NormalUser extends User {
  9.  
  10. public NormalUser(String name) {
  11. this.name = name;
  12. this.operations = new IOperation[]
  13. {
  14. new FindOperation(),
  15. new BorrowOperation(),
  16. new ReturnOperation(),
  17. new ExitOperation(),
  18. };
  19. }
  20. @Override
  21. public int menu(){
  22. System.out.println("~~~~~~~~~~~~~~~~~~");
  23. System.out.println("Hello"+name+"Welcome to use booksyetem");
  24. System.out.println("1.查阅书籍信息");
  25. System.out.println("2.借阅书籍");
  26. System.out.println("3.归还书籍");
  27. System.out.println("4.退出系统");
  28. System.out.println("~~~~~~~~~~~~~~~~~~");
  29. System.out.println("请输入您的选择:");
  30. Scanner scanner=new Scanner(System.in);
  31. int choice=scanner.nextInt();
  32. return choice;//返回一个整型数
  33. }
  34. }

NormalUser类针对与普通用户而编写,在代码中定义了一个接口数组,在其中添加了普通用户需要用到的查阅、借阅、归还、退出系统的四大功能,在menu()函数中也按照同样的顺序,menu()函数是重写父类的,所以为了提醒编译器,在函数头前加上了 @Override进行提示。

3.Admin类

  1. package booksystem;
  2.  
  3. import booksystem.operation.*;
  4.  
  5. import java.util.Scanner;
  6.  
  7. public class Admin extends User {
  8. public Admin(String name){
  9. this.name=name;
  10. this.operations=new IOperation[]{
  11. new FindOperation(),
  12. new AddOperation(),
  13. new DelOperation(),
  14. new DisplayOperation(),
  15. new ExitOperation(),
  16. };
  17. }
  18. @Override
  19. public int menu(){
  20. System.out.println("~~~~~~~~~~~~~~~~~~");
  21. System.out.println("Hello"+name+"Welcome to use booksyetem");
  22. System.out.println("1.查阅书籍信息");
  23. System.out.println("2.新增书籍信息");
  24. System.out.println("3.删除书籍信息");
  25. System.out.println("4.退出系统");
  26. System.out.println("~~~~~~~~~~~~~~~~~~");
  27. System.out.println("请输入您的选择:");
  28. Scanner scanner=new Scanner(System.in);
  29. int choice=scanner.nextInt();
  30. return choice;
  31. }
  32. }

Admin类编写的思路和NormalUser类的思路相同,区别在于用户界面的不同,对应要使用的功能也不同,分别是查阅、新增、删除和退出系统。

4.Book类

  1. package booksystem;
  2.  
  3. public class Book {
  4. private String name;
  5. private String author;
  6. private double price;
  7. private String type;
  8. private boolean isBorrowed = false;
  9.  
  10. public Book(String name, String author, double price, String type) {
  11. this.name = name;
  12. this.author = author;
  13. this.price = price;
  14. this.type = type;
  15. }
  16.  
  17. @Override
  18. public String toString() {
  19. return "Book{" +
  20. "name=" + name + '\'' + ",author" + author + '\'' + ",price=" + price + ",type='"
  21. + '\'' + type + '\'' + ",isBorrow=" + isBorrowed + '}';
  22. }
  23.  
  24. public String getName() {
  25. return name;
  26. }
  27.  
  28. public boolean isBorrowed(){
  29. return isBorrowed;
  30. }
  31.  
  32. public void setBorrowed(boolean borrowed){
  33. isBorrowed=borrowed;
  34. }
  35.  
  36. }

Book类针对书籍,定义了有关书的属性,作者、价格、名字、类别,重写了toString函数,以及对于书的几个常用的操作功能函数,getName,以及判读是否借出和定义书籍借出状态的函数。

5.BookList类

  1. package booksystem;
  2.  
  3. public class BookList {
  4. private Book[] books=new Book[100];//定义一book数组
  5. private int size=0;
  6.  
  7. public BookList(){
  8. books[0]=new Book("计算机网络教程","郝文源",125,"专业书籍");
  9. books[1]=new Book("盗墓笔记","南派三叔",150,"网络小说");
  10. books[2]=new Book("三体","刘慈欣",178,"科幻小说");
  11. size = 3;
  12. }//给book数组中初始化一些书
  13. public Book getBook(int index){
  14. return books[index];
  15. }
  16. public void setBook(int index,Book book)
  17. {
  18. books[index]=book;
  19. }
  20. public int getSize(){
  21. return size;
  22. }
  23. public void setSize(int size){
  24. this.size=size;
  25. }
  26. }

BookList类中定义了一个book数组,并给数组中初始化了一些书,定义了常用的功能函数

6.Main类

  1. package booksystem;
  2.  
  3. import java.util.Scanner;
  4. public class Main {
  5. public static void main(String[] args){
  6. Object o=null;
  7. BookList booklist= new BookList();
  8.  
  9. User user=login();//上转型,这里先调用了login()函数,返回一个Admin对象或NormalUser对象
  10.  
  11. while(true){
  12. int choice=user.menu();
  13. user.doOperation(choice,booklist);
  14. }//在进行退出系统的功能时,会一直进行循环,menu()函数最终会返回一个整型数,对应选择操作中的一项
  15. }
  16.  
  17. public static User login() {
  18. System.out.println("请输入您的姓名");
  19. Scanner scanner = new Scanner(System.in);
  20. String name = scanner.next();
  21. System.out.println("请输入您的角色:1 管理员 0 普通用户");//根据不同的选择创建对应的对象
  22. int who = scanner.nextInt();
  23. if (who == 1) {
  24. return new Admin(name);
  25. }
  26. return new NormalUser(name);
  27. }
  28. }

主函数中主要实现了login()函数,根据登录系统用户的选择,决定不同的身份,返回两种对象中的一种,在while循环中,只要不进行exit功能,循环便会一直执行。

7.IOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.BookList;
  4.  
  5. public interface IOperation {
  6. void work(BookList bookList);
  7. }

9.AddOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.Book;
  4.  
  5. import booksystem.BookList;
  6.  
  7. import java.util.Scanner;
  8.  
  9. public class AddOperation implements IOperation {
  10. @Override
  11. public void work(BookList bookList){
  12. Scanner scanner=new Scanner(System.in);
  13. System.out.println("新增书籍");
  14. System.out.println("请输入新书籍的名称");
  15. String name=scanner.next();
  16. System.out.println("请输入新书籍的作者");
  17. String author=scanner.next();
  18. System.out.println("请输入新书籍的价格");
  19. double price=scanner.nextDouble();
  20. System.out.println("请输入新书籍的类别");
  21. String type=scanner.next();
  22. Book newBook=new Book(name,author,price,type);
  23. int curSize=bookList.getSize();
  24. bookList.setBook(curSize,newBook);
  25. bookList.setSize(curSize+1);
  26. System.out.println("新增书籍成功");
  27. }
  28. }

10.BorrowOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.Book;
  4.  
  5. import booksystem.BookList;
  6.  
  7. import java.util.Scanner;
  8.  
  9. public class BorrowOperation implements IOperation{
  10. @Override
  11. public void work(BookList bookList)
  12. {
  13. Scanner scanner=new Scanner(System.in);
  14. System.out.println("借阅书籍");
  15. System.out.println("请输入要借阅的书籍的名称");
  16. String name=scanner.next();
  17.  
  18. int i=0;
  19. for(;i<bookList.getSize();i++)
  20. {
  21. if(bookList.getBook(i).getName().equals(name)){
  22. break;
  23. }
  24. }
  25. if(i>=bookList.getSize()){
  26. System.out.println("未找到指定的书籍,无法借阅!");
  27. return;
  28. }
  29. Book currentBook=bookList.getBook(i);
  30. if(currentBook.isBorrowed()){
  31. System.out.println("该书籍已经被借出!");
  32. return;
  33. }
  34. bookList.getBook(i).setBorrowed(true);
  35. System.out.println("借书成功!");
  36. }
  37.  
  38. }

11.DelOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.BookList;
  4.  
  5. import java.util.Scanner;
  6.  
  7. public class DelOperation implements IOperation{
  8. @Override
  9. public void work(BookList bookList)
  10. {
  11. Scanner scanner=new Scanner(System.in);
  12. System.out.println("删除书籍");
  13. System.out.println("请输入要删除的书籍的名称");
  14. String name=scanner.next();
  15.  
  16. int i=0;
  17. for(;i<bookList.getSize();i++)
  18. {
  19. if(bookList.getBook(i).getName().equals(name)){
  20. break;
  21. }
  22. }
  23. if(i>=bookList.getSize()){
  24. System.out.println("您输入的书籍在+"+name+"在系统中没有找到!删除失败!");
  25. return;
  26. }
  27. if(i==bookList.getSize()-1)
  28. {
  29. bookList.setSize(bookList.getSize()-1);
  30. System.out.println("删除成功!");
  31. return;
  32. }
  33. bookList.setBook(i,bookList.getBook(bookList.getSize()-1));
  34. bookList.setSize(bookList.getSize()-1);
  35. System.out.println("删除成功!");
  36. }
  37. }

13.ExitOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.BookList;
  4.  
  5. public class ExitOperation implements IOperation{
  6. @Override
  7. public void work(BookList bookList)
  8. {
  9. System.out.println("退出程序");
  10. System.exit(0);
  11. }
  12. }

14.FindOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.BookList;
  4.  
  5. public class ExitOperation implements IOperation{
  6. @Override
  7. public void work(BookList bookList)
  8. {
  9. System.out.println("退出程序");
  10. System.exit(0);
  11. }
  12. }

15.ReturnOperation

  1. package booksystem.operation;
  2.  
  3. import booksystem.BookList;
  4.  
  5. import booksystem.Book;
  6. import java.util.Scanner;
  7.  
  8. public class ReturnOperation implements IOperation{
  9. @Override
  10. public void work(BookList bookList){
  11. Scanner scanner=new Scanner(System.in);
  12. System.out.println("归还书籍");
  13. System.out.println("请输入要还的书籍的名称");
  14. String name=scanner.next();
  15. int i=0;
  16. for(;i<bookList.getSize();i++)
  17. {
  18. Book book=bookList.getBook(i);
  19. if(book.getName().equals(i))
  20. {
  21. break;
  22. }
  23. }
  24. if(i>=bookList.getSize())
  25. {
  26. System.out.println("书籍没有找到,无法归还");
  27. return;
  28. }
  29. Book currentBook=bookList.getBook(i);
  30. if(!currentBook.isBorrowed())
  31. {
  32. System.out.println("这本书没有借出,无法归还");
  33. }
  34. currentBook.setBorrowed(false);
  35. System.out.println("归还书籍成功");
  36. return;
  37. }
  38. }

四、编程截图及测试图

java实现图书管理系统

包和类放置图

java实现图书管理系统

运行截图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/qq_45742383/article/details/114379869

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部