700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 简易版 图书管理系统

简易版 图书管理系统

时间:2019-10-13 06:07:43

相关推荐

简易版 图书管理系统

目录

1. Book包

1.1Book类

1.2BookList类

2. User包

2.1 User抽象类

2.2AdminUser类

2.3 NormalUser类

3.Operate包

3.1 MyOperate接口

3.2 AddOperation类

3.3 DelOperation类

3.4 ExitOperation

3.5 FindOperation类

3.6 ShowOperation类

3.7BorrowedOperation类

3.8 ReturnOperation类

4. Main类

本章作为一个练习,对于前面学过的那些语法进行一个整合运用。

语法方面主要包括:封装、继承、多态、抽象类和接口。

首先,我们将整个系统分为4个包,

分别是Book类用于封装书和书架的具体信息。

Main包也就是封装主类,用于对整个系统的具体操作。

Operate包用于封装具体的操作。

User包用于管理用户信息。

我们一个包一个包来讲解。

1. Book包

Book包分为两类,分别是书和书架。

1.1Book类

该类主要是对书的一些基本信息进行封装,并且提供Getting和Setting方法。

package Book;public class Book {private String name;//书名private String author;//作者private int price;//价格private String type;//类型private boolean isBorrowed;//是否被借出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;}@Overridepublic String toString() {return "Book.Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isBorrowed=" + isBorrowed +//", isBorrowed=" + isBorrowed +(isBorrowed ? " 已经被借出" : " 未被借出") +'}';}}

1.2BookList类

书架的创建:

包括了初始化,以及对一些书籍的基本操作。

package Book;public class BookList {private Book[] books = new Book[10];//创建书架private int usedSize;//记录书架上书的数量public BookList() {//初始化3本书books[0] = new Book("我们仨","杨绛",89,"文学");books[1] = new Book("明朝那些事","当年明月",78,"历史");books[2] = new Book("红楼梦","曹雪芹",49,"小说");this.usedSize = 3;}public Book[] getBooks() {return books;}public void setBooks(int pos,Book book) {books[pos] = book;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getBook(int pos) {return this.books[pos];}//重写setBook方法作用于设置图书(增删)public void setBook(Book book) {this.books[usedSize] = book;}public void setBook(int pos,Book book) {this.books[pos] = book;}}

2. User包

User包被分为三类,其中User类是抽象类,用于管理人员类和普通用户类继承。

AdminUser是管理类,NormalUser类是普通用户类。

2.1 User抽象类

因为对于不同的用户而言,他们的访问权限是不同的,所以需要将菜单抽象出来以示区分。

另外就是基本信息。

package User;import Book.BookList;import Operate.MyOperate;//抽象出menu()菜单方法public abstract class User {//protected是访问权限,改为更大的也可以protected String name;protected MyOperate[] myOperate;//等会到Operate包再讲//用户信息public User(String name) {this.name = name;}public abstract int menu();//作用于main方法中对不同的用户进行区分public void doWork(int choice, BookList bookList) {this.myOperate[choice].work(bookList);}}

2.2AdminUser类

这里开辟的MyOperate数组是对管理人员的访问权限开辟空间,其中功能包括退出,查找,增加,删除,显示

package User;import Operate.*;import java.util.Scanner;public class AdminUser extends User {//管理人员所拥有的访问权限public AdminUser(String name) {super(name);this.myOperate = new MyOperate[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation(),};}//管理人员拥有的权限public int menu() {System.out.println("*****************************************");System.out.println("hello"+ name +"欢迎来到图书小小练习");System.out.println("1:查找图书");System.out.println("2:新增图书");System.out.println("3:删除图书");System.out.println("4:显示图书");System.out.println("0:退出系统");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}}

2.3 NormalUser类

这里开辟的MyOperate数组是对普通用户的访问权限开辟空间,其中功能包括退出,查找,借书,还书

package User;import Operate.*;import java.util.Scanner;public class NormalUser extends User {//普通用户所拥有的访问权限public NormalUser(String name) {super(name);this.myOperate = new MyOperate[]{new ExitOperation(),new FindOperation(),new BorrowedOperate(),new ReturnOperation(),};}//普通用户拥有的权限@Overridepublic int menu() {System.out.println("****************************");System.out.println("hello "+name+" 欢迎来到图书小练习");System.out.println("1.查找图书!");System.out.println("2.借阅图书!");System.out.println("3.归还图书!");System.out.println("0.退出系统!");System.out.println("****************************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}}

3.Operate包

Operate的各个操作,增、删、查、借书、还书、退出。

我们Operate包将普通用户和管理员用户的具体实现操作类全写在Operate包中。

3.1 MyOperate接口

MyOperate接口只设计好了各个Operation规范(方法)

package Operate;import Book.BookList;public interface MyOperate {public void work(BookList bookList);}

3.2 AddOperation类

本类用于添加书籍得基本信息,并且做了基本的判断。

package Operate;import Book.Book;import Book.BookList;import java.util.Scanner;public class AddOperation implements MyOperate {@Overridepublic 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 currentSize = bookList.getUsedSize();//遍历,查找是否想添加的书已经存在了//默认添加在最后面for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {System.out.println("已经存在这本书了,不能再放入了!");return;//如果存在即退出}}//如果不存在即添加bookList.setBook(book);//每添加一本书下表向后移bookList.setUsedSize(currentSize + 1);}}

3.3 DelOperation类

先上代码:

package Operate;import Book.Book;import Book.BookList;import java.util.Scanner;public class DelOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("删除图书!");System.out.println("请输入你要删除图书的名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//得到当前下标int currentSize = bookList.getUsedSize();int index = -1;//遍历,tmp.getName().equals(name)为真即表示书架存在该书//否则则该书不存在for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if (tmp.getName().equals(name)) {index = i;break;}}//图示说明for (int j = index; j < currentSize - 1; j++) {Book book = bookList.getBook(j+1);bookList.setBook(j,book);}bookList.setUsedSize(currentSize - 1);//删除对象,把最后一个设置为bullbookList.setBook(currentSize - 1, null);}}

图示:

假设currentSize 在这里,我们想要删掉该书,那么我们就将currentSize + 1 赋值给currentSize;

接着currentSize向后走:

重复上述操作:

知道最后一个:

直接将最后一个删除,毕竟每删除一个都需要将书架上的书减少一本:

这样也解释了为什么之前需要重写setBook()方法。

3.4 ExitOperation

该类就只提供一个方法:exit()

import Book.BookList;public class ExitOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("退出系统!");System.exit(0);}}

为什么exit()方法中的参数是0,因为我们正常退出是就是0:

3.5 FindOperation类

FindOperation类实现很简单,只需要提供书名再进行遍历,当然也可以根据价格、作者进行遍历。

package Operate;import Book.Book;import Book.BookList;import java.util.Scanner;public class FindOperation implements MyOperate{@Overridepublic void work(BookList bookList) {System.out.println("查找图书!");System.out.println("请输入书名!");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//获取当前图书在书架得下标int currentSize = bookList.getUsedSize();//遍历for (int i = 0; i < currentSize; i++) {//System.out.println(bookList[i]);Book book = bookList.getBook(i);if (book.getName().equals(name)) {System.out.println("找到了这本书");System.out.println(book.toString());return;}}System.out.println("没有找到"+name);}}

3.6 ShowOperation类

遍历获取通过Getting方法打印即可。

package Operate;import Book.Book;import Book.BookList;public class ShowOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("打印所有图书!");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);System.out.println(book);}}}

以上便是管理员访问得全部权限,当然有需要还可以自己添加所需要的方法。

后面得便是普通用户特有的权限,普通用户也有FindOperation、ShowOperation。

3.7BorrowedOperation类

方法的逻辑很简单,只需稍加注意

package Operate;import Book.Book;import Book.BookList;import java.util.Scanner;public class BorrowedOperate implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("借阅图书!");System.out.println("请输入你要借阅的图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//获取int currentSize = bookList.getUsedSize();//遍历for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);//不仅需要判断书是否存在书架上,并且还需要判断是否已经借出if (book.getName().equals(name) &&book.isBorrowed() == false) {book.setBorrowed(true);System.out.println("借阅成功");return;}}}}

3.8 ReturnOperation类

逻辑于BorrowedOperation类相似

package Operate;import Book.Book;import Book.BookList;import java.util.Scanner;public class ReturnOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("归还图书!");System.out.println("请输入你要归还的图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name) &&book.isBorrowed()) {book.setBorrowed(false);System.out.println("归还成功");return;}}}}

4. Main类

Main类中只有一个类,主类,整个程序的入口。

上代码:

package Main;import Book.BookList;import User.AdminUser;import User.User;import User.NormalUser;import java.util.Scanner;public class Main {//提供一个静态方法用于创建身份,是判断管理员还是普通用户public static User login() {System.out.println("请输入你的姓名");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();System.out.println("输入你的身份 1 -> 管理员 2->普通用户");int choice = scanner.nextInt();if (choice == 1) {return new AdminUser(name);} else {return new NormalUser(name);}}public static void main(String[] args) {BookList bookList = new BookList();User user = login();while (true) {int choice = user.menu();user.doWork(choice,bookList);}}}

这里发生了一个向上转型:

主方法的内容非常简单:

1. 创建一个书架;

2.通过登录方法确认用户信息;

3.一个死循环,不停的使用“权限”,知道用户输入0退出。

这里就体现了面向对象的思想,所有的过程全部封装完成,只对外提供了公开的方法。

本章的思路都非常简单,只是有些地方需要稍加注意,本章的目的便是体验面向对象的思想。

案例演示:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。