• Java实现图书管理系统


    今天与大家分享的是一个图书管理系统,这里我们运用的是java基础的语法其中包括类和对象、继承、封装、多态、抽象类、接口还有数组等。

    我们需要实现一个可以进行管理员操作和用户操作的图书管理系统,其中包括了管理员操作(查找,添加,删除,显示,退出系统);用户操作(查找,借阅,归还,退出系统).

    简单示意图:

    可以分为三步:

    一.书的内容和存取书

    二.用户登录,分为管理员和普通用户

    三.书相关操作

    一、book包

    在idea中新建一个Book包,用来存放图书相关的类。

    1.Book类

    使用Java的封装的特点,用私有化的权限定义一些书的属性。这些属性创建之后,需要进行初始化,可以使用构造方法,同时,重写Book类中的toString方法,方便打印。

    1. package book;
    2. public class Book {
    3. private String name;//书名
    4. private String author;//作者
    5. private int price;//价格
    6. private String type;//书的类型
    7. private boolean isBorrowed;//是否被借出 默认值是false
    8. public Book(String name, String author, int price, String type) {
    9. this.name = name;
    10. this.author = author;
    11. this.price = price;
    12. this.type = type;
    13. }
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. public String getAuthor() {
    21. return author;
    22. }
    23. public void setAuthor(String author) {
    24. this.author = author;
    25. }
    26. public int getPrice() {
    27. return price;
    28. }
    29. public void setPrice(int price) {
    30. this.price = price;
    31. }
    32. public String getType() {
    33. return type;
    34. }
    35. public void setType(String type) {
    36. this.type = type;
    37. }
    38. public boolean isBorrowed() {
    39. return isBorrowed;
    40. }
    41. public void setBorrowed(boolean borrowed) {
    42. isBorrowed = borrowed;
    43. }
    44. @Override
    45. public String toString() {
    46. return "Book{" +
    47. "name='" + name + '\'' +
    48. ", author='" + author + '\'' +
    49. ", price=" + price +
    50. ", type='" + type + '\'' +
    51. ( (isBorrowed == true) ? ",已借出" : ",未借出" )+
    52. //", isBorrowed=" + isBorrowed +
    53. '}';
    54. }
    55. }

    2.BookList类

     创建一个BookList类来定义书架,在BookList类里面定义一个Book类的数组,还应该定义一个变量表示有多少本书。因为一个书架上不一定是满书的状态。在构造方法里面定义BooK数组大小为10,初始化3本书。

        BookList里面需要什么方法呢?获取书架上某一个位置的书、改变书架上某一个位置的书、获取书架上书的数量、当书减少或增加时改变书的数量。

    1. package book;
    2. public class BookList {
    3. private Book[] books;
    4. private int usedSize;//记录当前书架放了几本书
    5. public BookList() {
    6. this.books = new Book[10];
    7. this.books[0] = new Book("三国演义","罗贯中",10,"小说");
    8. this.books[1] = new Book("西游记","吴承恩",10,"小说");
    9. this.books[2] = new Book("红楼梦","曹雪芹",19,"小说");
    10. this.usedSize = 3;
    11. }
    12. public int getUsedSize() {
    13. return usedSize;
    14. }
    15. public void setUsedSize(int usedSize) {
    16. this.usedSize = usedSize;
    17. }
    18. public Book getBook(int pos) {
    19. return books[pos];
    20. }
    21. public void setBook(Book book,int pos) {
    22. books[pos] = book;
    23. }
    24. }

    二、User包

     管理员类和普通用户类都有一些共性:用户姓名、菜单等,所以可以把它们共有的抽取出来,形成继承关系。

    1.User

    包含基本属性:姓名,menu(菜单)方法的声明,doOperation(执行方法操作)方法的声明

    1. package user;
    2. import book.BookList;
    3. import operation.FindOperation;
    4. import operation.IOPeration;
    5. public abstract class User {
    6. protected String name;
    7. protected IOPeration[] ioPerations;
    8. public User(String name) {
    9. this.name = name;
    10. }
    11. public abstract int menu();
    12. public void doOperation(int choice, BookList bookList) {
    13. //this.ioPerations[choice].work(bookList);
    14. IOPeration ioPeration = this.ioPerations[choice];
    15. ioPeration.work(bookList);
    16. }
    17. }

     2.Administrator类

    管理员类继承父类User类。

    1. package user;
    2. import operation.*;
    3. import java.util.Scanner;
    4. public class AdminUser extends User {
    5. public AdminUser(String name) {
    6. super(name);
    7. this.ioPerations = new IOPeration[]{
    8. new ExitOperation(),
    9. new FindOperation(),
    10. new AddOperation(),
    11. new DelOperation(),
    12. new ShowOperation()
    13. };
    14. }
    15. public int menu() {
    16. System.out.println("********管理员菜单********");
    17. System.out.println("1.查找图书");
    18. System.out.println("2.新增图书");
    19. System.out.println("3.删除图书");
    20. System.out.println("4.显示图书");
    21. System.out.println("0.退出系统");
    22. System.out.println("************************");
    23. System.out.println("请输入你的操作:");
    24. Scanner scanner = new Scanner(System.in);
    25. int choice = scanner.nextInt();
    26. return choice;
    27. }
    28. }

    3.NormalUser类

    普通用户类继承了父类User类

    1. package user;
    2. import operation.*;
    3. import java.util.Scanner;
    4. public class NormalUser extends User{
    5. public NormalUser(String name) {
    6. super(name);
    7. this.ioPerations = new IOPeration[]{
    8. new ExitOperation(),
    9. new FindOperation(),
    10. new BorrowOperation(),
    11. new ReturnOperation()
    12. };
    13. }
    14. public int menu() {
    15. System.out.println("********普通用户菜单********");
    16. System.out.println("1.查找图书");
    17. System.out.println("2.借阅图书");
    18. System.out.println("3.归还图书");
    19. System.out.println("0.退出系统");
    20. System.out.println("***************************");
    21. System.out.println("请输入你的操作:");
    22. Scanner scanner = new Scanner(System.in);
    23. int choice = scanner.nextInt();
    24. return choice;
    25. }
    26. }

    三、Operation包

    这个包是整个程序最为关键的部分,包含图书管理上基本操作的实现,涉及了大量JAVA语言的基本语法与运用,下面我将进行逐步讲解。

    1.IOPeration接口

    为了更好的组织管理员与普通用户的操作,我在这里创建了接口后面让其余操作实现这个接口,在用户里以IOPeration接口创建数组,区分开管理员与普通用户的操作

    1. package operation;
    2. import book.BookList;
    3. public interface IOPeration {
    4. void work(BookList bookList);
    5. }

    2.AddOperation类

    添加图书的方法

    1. ackage operation;
    2. import book.Book;
    3. import book.BookList;
    4. import java.util.Scanner;
    5. public class AddOperation implements IOPeration {
    6. public void work(BookList bookList) {
    7. System.out.println("新增图书!");
    8. Scanner scanner = new Scanner(System.in);
    9. System.out.println("请输入你要新增图书的书名:");
    10. String name = scanner.nextLine();
    11. System.out.println("请输入你要新增图书的作者:");
    12. String author = scanner.nextLine();
    13. System.out.println("请输入你要新增图书的价格:");
    14. int price = scanner.nextInt();
    15. System.out.println("请输入你要新增图书的类型:");
    16. scanner.nextLine();
    17. String type = scanner.nextLine();
    18. //此时就可以构造出 一个书的对象
    19. Book book = new Book(name,author,price,type);
    20. int currentSize = bookList.getUsedSize();
    21. for (int i = 0; i < currentSize; i++) {
    22. Book tmp = bookList.getBook(i);
    23. if(tmp.getName().equals(name)) {
    24. System.out.println("存在这本书,不能重复添加!");
    25. return;
    26. }
    27. }
    28. //没有重复的书 开始新增
    29. bookList.setBook(book,currentSize);
    30. bookList.setUsedSize(currentSize+1);
    31. }
    32. }

    3.FindOperation类

    寻找图书的方法

    1. package operation;
    2. import book.Book;
    3. import book.BookList;
    4. import java.util.Scanner;
    5. public class FindOperation implements IOPeration {
    6. public void work(BookList bookList) {
    7. System.out.println("查找图书!");
    8. System.out.println("请写出你要查找的图书的书名:");
    9. Scanner scanner = new Scanner(System.in);
    10. String name = scanner.nextLine();
    11. int currentSize = bookList.getUsedSize();
    12. for (int i = 0; i < currentSize; i++) {
    13. //Book book = bookList[i];
    14. Book book = bookList.getBook(i);
    15. if(book.getName().equals(name)) {
    16. System.out.println("存在这本书,信息如下:");
    17. System.out.println(book);
    18. return;
    19. }
    20. }
    21. //代码没有return 出去 ,么有你要找的书
    22. System.out.println("没有你要找的这本书,书名为:"+ name);
    23. }
    24. }

    4.DelOperation类

    删除图书所使用的方法

    1. package operation;
    2. import book.Book;
    3. import book.BookList;
    4. import java.util.Scanner;
    5. public class DelOperation implements IOPeration {
    6. public void work(BookList bookList) {
    7. System.out.println("删除图书!");
    8. Scanner scanner = new Scanner(System.in);
    9. System.out.println("请输入你要删除图书的书名:");
    10. int currentSize = bookList.getUsedSize();
    11. int index = -1;
    12. String name = scanner.nextLine();
    13. int i = 0;
    14. for (; i < currentSize; i++) {
    15. Book tmp = bookList.getBook(i);
    16. if(tmp.getName().equals(name)) {
    17. index = i;
    18. break;//记录下来了 要删除图书的姓名
    19. }
    20. }
    21. //
    22. if(i >= currentSize) {
    23. System.out.println("没有你要删除的图书!");
    24. return;
    25. }
    26. //可以删除了 怎么删 稍等
    27. for (int j = index; j < currentSize-1; j++) {
    28. //bookList[j] = bookList[j+1]
    29. Book book = bookList.getBook(j+1);
    30. bookList.setBook(book,j);
    31. }
    32. bookList.setBook(null,currentSize-1);
    33. bookList.setUsedSize(currentSize-1);
    34. System.out.println("删除成功!");
    35. }
    36. }

    5.ShowOperation类

    显示所有图书的方法

    1. package operation;
    2. import book.Book;
    3. import book.BookList;
    4. public class ShowOperation implements IOPeration {
    5. @Override
    6. public void work(BookList bookList) {
    7. System.out.println("显示图书");
    8. int currentSize = bookList.getUsedSize();
    9. for (int i = 0; i < currentSize; i++) {
    10. //Book book = bookList[i];
    11. Book book = bookList.getBook(i);
    12. System.out.println(book);
    13. }
    14. }
    15. }

    6.BorrowOperation方法

    借出图书的方法

    1. package operation;
    2. import book.Book;
    3. import book.BookList;
    4. import java.util.Scanner;
    5. public class BorrowOperation implements IOPeration {
    6. @Override
    7. public void work(BookList bookList) {
    8. System.out.println("借阅图书!");
    9. System.out.println("请写出你要借阅的图书的书名:");
    10. Scanner scanner = new Scanner(System.in);
    11. String name = scanner.nextLine();
    12. int currentSize = bookList.getUsedSize();
    13. for (int i = 0; i < currentSize; i++) {
    14. Book book = bookList.getBook(i);
    15. if(book.getName().equals(name)) {
    16. //有这本书的
    17. book.setBorrowed(true);
    18. System.out.println("借阅成功!");
    19. return;
    20. }
    21. }
    22. System.out.println("没有你要借阅的图书:"+name);
    23. }
    24. }

    7.ReturnOperation方法

    归还图书的方法

    1. package operation;
    2. import book.Book;
    3. import book.BookList;
    4. import java.util.Scanner;
    5. public class ReturnOperation implements IOPeration {
    6. @Override
    7. public void work(BookList bookList) {
    8. System.out.println("归还图书!");
    9. System.out.println("请写出你要归还的图书的书名:");
    10. Scanner scanner = new Scanner(System.in);
    11. String name = scanner.nextLine();
    12. int currentSize = bookList.getUsedSize();
    13. for (int i = 0; i < currentSize; i++) {
    14. Book book = bookList.getBook(i);
    15. if(book.getName().equals(name)) {
    16. //有这本书的
    17. book.setBorrowed(false);
    18. System.out.println("归还成功!");
    19. return;
    20. }
    21. }
    22. System.out.println("没有你要归还的图书:"+name);
    23. }
    24. }

    8.ExitOperation方法

    退出系统所使用的方法。

    1. ackage operation;
    2. import book.BookList;
    3. public class ExitOperation implements IOPeration {
    4. @Override
    5. public void work(BookList bookList) {
    6. System.out.println("退出系统");
    7. //应该要 对 bookList 资源 手动回收
    8. System.exit(0);
    9. }
    10. }

    四、main方法

    1. import book.BookList;
    2. import user.AdminUser;
    3. import user.NormalUser;
    4. import user.User;
    5. import java.util.Scanner;
    6. public class Main {
    7. public static User login() {
    8. System.out.println("请输入你的姓名:");
    9. Scanner scanner = new Scanner(System.in);
    10. String name = scanner.nextLine();
    11. System.out.println("请输入你的身份,1:管理员 2:普通用户-》");
    12. int choice = scanner.nextInt();
    13. if(choice == 1) {
    14. return new AdminUser(name);
    15. }else {
    16. return new NormalUser(name);
    17. }
    18. }
    19. public static void main(String[] args) {
    20. BookList bookList = new BookList();
    21. //此时这个user到底指向的是 管理员对象 还是 普通用户对象 不知道的
    22. // user = new AdminUser(name);
    23. // user = new NormalUser(name);
    24. User user = login();
    25. while (true) {
    26. int choice = user.menu();
    27. //根据你菜单返回的choice来执行对应的操作
    28. user.doOperation(choice, bookList);
    29. }
    30. }
    31. }

    五、操作示例

    来到这里,我们的图书管理系统也就算讲解完毕了,希望对大家的学习有所帮助,也希望大家多多支持~~

  • 相关阅读:
    Spring Boot 配置文件中的中文读取出来是乱码,或者是问号
    探索冒泡排序:C语言实践教程
    【Linux kernel/cpufreq】framework ----big Little driver
    数字孪生能源系统,打造低碳时代“透视”眼
    Ubuntu:VS Code IDE安装ESP-IDF【保姆级】(草稿)
    区间素数 马蹄集
    AIGC:语音克隆模型Bert-VITS2-2.3部署与实战
    SAP FIORI专题之四:使用fiori element构建over page
    毕业设计:基于Springboot+Vue+ElementUI实现疫情社区管理系统
    融合空间与视觉,揭示信息之美——GIS与可视化的奇妙结合
  • 原文地址:https://blog.csdn.net/Brenda_Bestow/article/details/134479230