当前位置:   article > 正文

Java图书管理系统_java图书馆管理系统

java图书馆管理系统

图书管理系统是java知识的一个小总结,运用了类和对象,构造方法,方法调用,数组,接口,重载,接口,抽象类等知识。是一个检验知识的好机会

完成代码:test-C: CCCCCCCCCCCCCCCCCCCCC

文章目录

设计思路

一、图书(Book包)

1.Book类

2.BookList类

二、使用者(user包)

1.Main类

2.User类

3.AdminUser(管理员)

4.NormalUser(普通用户)

三、操作(opera包)

1.IOperation接口

2.FindOperation类(查找图书功能)

3.ShowOperation类(显示图书功能)

4.AddOperation类(新增图书功能)

5.DelOperation类(删除图书功能)

6.BorrowOperation类(借阅图书功能)

7.ReturnOperation类(归还图书功能)

8.ExitOperation类(退出系统功能)

总结


设计思路

写一个图书系统,我们需要先需求分析,然后结构分析,最后再从分析的结果一步步写代码,这些是循环渐进的,不会是直接随手写出来一个系统。

通过分析我们创造相关的包和类


 

 

一、图书(Book包)

1.Book类

在Book类中,我们需要创建书的属性,比如说:书名、作者名、书的价格、书的类型、书的状态(是否借出)

再通过构造方法,获取get和set方法,然后重写toString方法

在这里我们要注意在显示功能中用到的toString方法,我们可以将书的状态做一个判断如下代码,

图1是正常的toString,会有些不好看。图2就是修改之后的方法

 

1.

 2.

 

2.BookList类

在BookList类中,我们需要将图书的属性存放在一个数组中。

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

 

二、使用者(user包)

1.Main类

需要注意的是在身份输出后,增加了一个判断用户的操作,以显示不同的操作菜单

 

 并添加一个while循环,以便可以使用多个操作。

  1. public class Main {
  2. public static User login(){
  3. System.out.println("请输入你的姓名");
  4. Scanner sc = new Scanner(System.in);
  5. String name = sc.nextLine();
  6. System.out.println("请输入你的身份 1->管理员 0->普通用户");
  7. int id = sc.nextInt();
  8. if (id == 1){
  9. return new AdminUser(name);
  10. }else{
  11. return new NormalUser(name);
  12. }
  13. }
  14. public static void main(String[] args) {
  15. User user = login();
  16. BookList bookList = new BookList();
  17. while(true) {
  18. int choose = user.menu();
  19. user.doWork(choose, bookList);
  20. }
  21. }
  22. }

2.User类

创建抽象类User,抽象方法menu菜单和IOperation数组的初始化(在AdminUser类和NormalUser类中会重要体现到)

因为我们的管理员和普通用户的操作菜单不同,所以可以通过重写menu方法来显示不同的菜单

  1. public abstract class User {
  2. protected String name;
  3. protected IOperation[] iOperations;
  4. public User(String name){
  5. this.name = name;
  6. }
  7. public abstract int menu();
  8. public void doWork(int choose, BookList bookList){
  9. this.iOperations[choose].work(bookList);
  10. }
  11. }

3.AdminUser(管理员)

通过继承User类,调用到IOperation功能接口以调用管理员所需的功能

  1. public class AdminUser extends User{
  2. public AdminUser(String name) {
  3. super(name);
  4. this.iOperations = new IOperation[] {
  5. new ExitOperation(),
  6. new FindOperation(),
  7. new AddOperation(),
  8. new DelOperation(),
  9. new ShowOperation(),
  10. };
  11. }
  12. public int menu(){
  13. System.out.println("=================================");
  14. System.out.println("Hello " + name + " 欢迎来到管理系统");
  15. System.out.println("1.查找图书");
  16. System.out.println("2.新增图书");
  17. System.out.println("3.删除图书");
  18. System.out.println("4.显示图书");
  19. System.out.println("0.退出系统");
  20. System.out.println("=================================");
  21. System.out.println("请输入序号: ");
  22. Scanner sc = new Scanner(System.in);
  23. int choose = sc.nextInt();
  24. return choose;
  25. }
  26. }

4.NormalUser(普通用户)

通过继承User类,调用到IOperation功能接口以调用普通用户所需的功能

  1. public class NormalUser extends User{
  2. public NormalUser(String name) {
  3. super(name);
  4. this.iOperations = new IOperation[] {
  5. new ExitOperation(),
  6. new FindOperation(),
  7. new BorrowOperation(),
  8. new ReturnOperation(),
  9. };
  10. }
  11. public int menu(){
  12. System.out.println("=================================");
  13. System.out.println("Hello " + name + " 欢迎来到管理系统");
  14. System.out.println("1.查找图书");
  15. System.out.println("2.借阅图书");
  16. System.out.println("3.归还图书");
  17. System.out.println("0.退出系统");
  18. System.out.println("=================================");
  19. System.out.println("请输入序号: ");
  20. Scanner sc = new Scanner(System.in);
  21. int choose = sc.nextInt();
  22. return choose;
  23. }
  24. }

三、操作(opera包)

1.IOperation接口

这里实现一个功能的接口,方便之后的各种操作类执行该接口,利用多态进行相关操作

  1. public interface IOperation {
  2. public void work(BookList bookList);
  3. }

(在以下的类中执行接口,并重载)

2.ShowOperation类(显示图书功能)

创建currentSize接受BookList的UsedSize(书的数量)

通过for循环遍历数组得到所有的信息

  1. public class ShowOperation implements IOperation{
  2. public void work(BookList bookList){
  3. System.out.println("显示图书");
  4. int currentSize = bookList.getUsedSize();
  5. for (int i = 0; i < currentSize; i++) {
  6. Book book = bookList.getBook(i);
  7. System.out.println(book);
  8. }
  9. }
  10. }

 3.FindOperation类(查找图书功能)

通过for循环遍历数组得到所有的信息,实例化对象book,if判断查找输入的书名是否在BookList中,如果不存在就输出没有该图书,反之,查询成功并输出该图书的信息(注意equals方法)

  1. public class FindOperation implements IOperation{
  2. public void work(BookList bookList){
  3. System.out.println("查询图书");
  4. System.out.println("请输入您要查找图书的名字");
  5. Scanner sc = new Scanner(System.in);
  6. String name = sc.nextLine();
  7. int currentSize = bookList.getUsedSize();
  8. for (int i = 0; i < currentSize; i++) {
  9. Book book = bookList.getBook(i);
  10. if(book.getName().equals(name)){
  11. System.out.println("查询成功");
  12. System.out.println(book);
  13. return ;
  14. }
  15. }
  16. System.out.println("没有该图书");
  17. }
  18. }

4.AddOperation类(新增图书功能)

如果要新增一个图书,就要将所有图书的属性输入,并利用if equals进行重名检测

并通过实例化对象bookList中set添加到BookList数组中,将书的数量+1

  1. public class AddOperation implements IOperation{
  2. public void work(BookList bookList){
  3. System.out.println("新增图书");
  4. Scanner sc = new Scanner(System.in);
  5. System.out.println("输入书名:");
  6. String name = sc.nextLine();
  7. System.out.println("请输入作者");
  8. String author = sc.nextLine();
  9. System.out.println("请输入价格");
  10. int price = sc.nextInt();
  11. System.out.println("请输入类型");
  12. String type = sc.nextLine();
  13. Book book = new Book(name,author,price,type);
  14. int currentSize = bookList.getUsedSize();
  15. for (int i = 0; i < currentSize; i++) {
  16. Book b = bookList.getBook(i);
  17. if (b.getName().equals(name)){
  18. System.out.println("该书已存在");
  19. return;
  20. }
  21. }
  22. bookList.setBook(book);
  23. bookList.setUsedSize(currentSize + 1);
  24. }
  25. }

5.DelOperation类(删除图书功能)

设置index表明需要删除图书的位置,进行if判断图书存在,如果存在,就将数组中i的下标传给index,再进行for对currentSize(现有书的数量)进行遍历,将index下标删除后,将之后的下标前移,并将currentSize-1

  1. public class DelOperation implements IOperation{
  2. public void work(BookList bookList){
  3. System.out.println("删除图书");
  4. System.out.println("请输入删除图书的书名:");
  5. Scanner sc = new Scanner(System.in);
  6. String name = sc.nextLine();
  7. int currentSize = bookList.getUsedSize();
  8. int index = -1;
  9. for (int i = 0; i < currentSize; i++) {
  10. Book book = bookList.getBook(i);
  11. if (book.getName().equals(name)){
  12. index = i;
  13. break;
  14. }
  15. }
  16. for (int j = index; j < currentSize - 1; j++) {
  17. Book book = bookList.getBook(j+1);
  18. bookList.setBook(j,book);
  19. }
  20. bookList.setUsedSize(currentSize - 1);
  21. bookList.setBook(currentSize-1,null);
  22. System.out.println("删除成功");
  23. }
  24. }

6.BorrowOperation类(借阅图书功能)

在借阅功能中,我们不仅要查询图书是否存在,也要查询图书的状态(是否借出)

  1. public class BorrowOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("借出图书");
  5. System.out.println("请输入要借阅的图书: ");
  6. Scanner sc = new Scanner(System.in);
  7. String name = sc.nextLine();
  8. int currentSize = bookList.getUsedSize();
  9. for (int i = 0; i < currentSize; i++) {
  10. Book book = bookList.getBook(i);
  11. if (book.getName().equals(name)
  12. && book.isBorrowed() == false){
  13. book.setBorrowed(true);
  14. System.out.println("借阅成功");
  15. return;
  16. }
  17. }
  18. }
  19. }

7.ReturnOperation类(归还图书功能)

在归还功能中,我们不仅要查询图书是否存在,也要查询图书的状态(是否借出)

  1. public class ReturnOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("归还图书");
  5. System.out.println("请输入要归还的图书: ");
  6. Scanner sc = new Scanner(System.in);
  7. String name = sc.nextLine();
  8. int currentSize = bookList.getUsedSize();
  9. for (int i = 0; i < currentSize; i++) {
  10. Book book = bookList.getBook(i);
  11. if (book.getName().equals(name)
  12. && book.isBorrowed() == true){
  13. book.setBorrowed(false);
  14. System.out.println("归还成功");
  15. return;
  16. }
  17. }
  18. System.out.println("没有该图书");
  19. }
  20. }

8.ExitOperation类(退出系统功能)

在通常的编译运行后一般会有返回0,所以调用System的exit方法,传入参数0进行退出运行

 

  1. public class ExitOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.exit(0);
  5. System.out.println("已成功退出系统");
  6. }
  7. }


总结

在实现图书管理系统的同时,我们发现继承,抽象,接口,多态的重要性,以及重载,重写的方便性,每次动手写这样的一个系统的时候,都有不同的感悟和发现,这会巩固之前知识。

最后感谢各位码友的浏览,希望对每一个人都有所帮助!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/512261
推荐阅读
相关标签
  

闽ICP备14008679号