liangzai比代码更鲜活
我的主页:_liangzai
欢迎大家访问~~
创作不易,点赞关注鼓励一下吧~~
目录
book包
该包中有两个类,用来对书进行管理,分别是Book类,BookList类。
Book类
每本书有书名,作者,类型,价格,是否借出,我们将它们定义出来,并用快捷键获得get和set方法。
在生成一个构造方法,含书名,作者,类型,价格。
然后再快捷键重写 Object的equals方法,重写toString方法。
tip:
toString方法我们要将借出的boolean类型转换为是否借出输出,就需要改为3目操作符 ((this.isBorrowed)?“, 已借出”:“, 未借出”)
最终该类代码就是:
/**
* @Author liangzai
* @Description:
*/
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean aBoolean;
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 isaBoolean() {
return aBoolean;
}
public void setaBoolean(boolean aBoolean) {
this.aBoolean = aBoolean;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", " + ((this.aBoolean)?"已借出":"未借出") +
'}';
}
}
BookList类
在这个类中我们就将书给管理起来(简易顺序表),所以成员就用一个Book数组来存书,在用一个usedSize来表示存入书的数目,提供get和set方法。并在构造方法中初始化几本书。
BookList类最终代码:
/**
* @Author liangzai
* @Description:
*/
public class BookList {
//初始书架的容量为10本书
Book[] books = new Book[10];
private int size;
public BookList(){
this.books[0] = new Book("三国演义","罗贯中",10,"小说");
this.books[1] = new Book("西游记","吴承恩",20,"小说");
this.books[2] = new Book("红楼梦","曹雪芹",30,"小说");
//初始时书架上有这3本书
this.size=3;
}
public Book[] getBooks() {
return books;
}
public void setBooks(int pos, Book books) {
this.books[pos] = books;
}
public Book getBooks(int pos) {
return books[pos];
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
user包
该包用来管理使用者。含有3个类,抽象类User来作为管理员类和普通用户类的父类抽取共性。
User类
每一个管理员和普通用户都有名字,还有展示效果中选择了自己身份后会跳出菜单来让你选择操作。再用一个方法来表示调用的操作(因为我们将每一个操作封装为一个类来操作),用Iopertion数组来存入子类的操作。
BookList类最终代码:
/**
* @Author liangzai
* @Description:
*/
public abstract class User {
private String name;
Ioperate[] ioperates = new Ioperate[10];
public User(String name) {
this.name = name;
}
//抽象方法
public abstract int menu();
public void doIoperate(int choice, BookList bookList){
ioperates[choice].work(bookList);
}
}
AdminUser类(管理员类)
该类继承User类并且将父类的抽象方法重写,在该方法中调用对应类的具体工作方法(自己实现的work方法)。并且在自己的构造方法中将Iopertion接口实现的数组初始化(根据提供的操作对应的数字,数字对应下标初始为对应操作实现的类)。
AdmiUser类最终代码:
/**
* @Author liangzai
* @Description:
*/
//Admin类继承User类
public class Admin extends User{
public Admin(String name) {
super(name);
ioperates = new Ioperate[]{
new Exit(),
new FindBook(),
new AddBook(),
new DelBook(),
new ShowBook()
};
}
//返回值int用于不同操作的实现
public int menu(){
System.out.println("*******管理员******");
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);
int choice = scanner.nextInt();
System.out.println();
//返回值int
return choice;
}
}
NormalUser类(普通用户类)
在该类中与管理员类实现一致,只是在设计实现自己的操作时改一下就好。
NormalUser类最终代码:
/**
* @Author liangzai
* @Description:
*/
//Normal类继承User类
public class Normal extends User{
public Normal(String name) {
super(name);
ioperates = new Ioperate[]{
new Exit(),
new FindBook(),
new BrowwedBook(),
new ReturnBook()
};
}
//返回值int用于不同操作的实现
public int menu(){
System.out.println("*******管理员******");
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);
int choice = scanner.nextInt();
System.out.println();
//返回值int
return choice;
}
}
Ioperate包
在改包中实现具体的操作,对书的增加,删除,借阅,归还,查找,展示,退出程序,这7个类在加上接口。
Ioperate接口
这个接口就抽取一个work的共性方法。
最终代码:
package Ioperate;
import book.BookList;
/**
* @Author liangzai
* @Description:
*/
public interface Ioperate {
void work(BookList bookList);
}
FindBook类(查找操作)
在该类中实现IOpertion接口,实现work方法,
先将要查找的书用临时变量存起来,然后遍历书架已有的书看是否有这本书,有就打印。
FindBook类最终代码:
/**
* @Author liangzai
* @Description:
*/
public class FindBook implements Ioperate{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
int count = bookList.getSize();
System.out.println("请输入要查找的书名:");
String name = scanner.nextLine();
for (int i = 0; i < count; i++) {
Book book = bookList.getBooks(i);
if(book.getName().equals(name)){
System.out.println(book);
System.out.println();
return ;
}
}
System.out.println("此书不存在!");
}
}
AddBook类(增加操作)
该操作与查找操作实现一致,只是在找到后就告诉已经有这本书了,没找到就添加,并将usedSize加1.
AddBook类最终代码
/**
* @Author liangzai
* @Description:
*/
public class AddBook implements Ioperate{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
int count = bookList.getSize();
int i = 0;
System.out.println("请输入书名:");
String name = scanner.nextLine();
System.out.println("请输入作者:");
String author = scanner.nextLine();
System.out.println("请输入价格:");
int price = scanner.nextInt();
String s = scanner.nextLine();
System.out.println("请输入书的类型:");
String type = scanner.nextLine();
Book book = new Book(name,author,price,type);
for(i=0;i<count;i++){
if(bookList.getBooks(i).equals(name)){
System.out.println("此书已存在!");
System.out.println();
return ;
}
}
System.out.println("加入成功!");
System.out.println();
bookList.setBooks(count,book);
bookList.setSize(count+1);
}
}
DeleteBook类(删除操作)
该操作与查找操作实现一致,只是在找到后记录这个下标,并且再用一个循环(注意结束条件)用后面的书覆盖前面的,将usedSize减1,没找到就输出没有该书。
DeletOpertion类最终代码
/**
* @Author liangzai
* @Description:
*/
public class DelBook implements Ioperate{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
int count = bookList.getSize();
int i = 0;
int pos = -1;
System.out.println("请输入要删除的书名:");
String name = scanner.nextLine();
for(i=0;i<count;i++){
Book book = bookList.getBooks(i);
if(book.getName().equals(name)){
pos = i;
break;
}
}
if(i==count){
System.out.println("此书不存在!");
return ;
}
for (int j = pos; j < count-1; j++) {
bookList.setBooks(j,bookList.getBooks(j+1));
}
bookList.setBooks(count-1,null);
bookList.setSize(count-1);
System.out.println("删除成功!");
System.out.println();
}
}
BrowwedBook类(借阅操作)
该操作与查找操作实现一致,只是在找到(这里的找到指有这本书并且状态是未借出)后就将这本书的状态改为已借出(将isBorrowed改为true),有但是已被借出就输出该书已被借出,没找到就输出没有。
BrowwedBook类最终代码:
/**
* @Author liangzai
* @Description:
*/
public class BrowwedBook implements Ioperate{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
int count = bookList.getSize();
System.out.println("请输入要借阅的书名:");
String name = scanner.nextLine();
for (int i = 0; i < count; i++) {
Book book = bookList.getBooks(i);
if(book.getName().equals(name)){
if(book.isaBoolean()==false){
book.setaBoolean(true);
System.out.println();
return ;
}else{
System.out.println("此书已借出!");
System.out.println();
return ;
}
}
if(i==count) {
System.out.println("此书不存在!");
System.out.println();
}
}
}
}
ReturnBook 类(归还操作)
该操作与查找操作实现一致,只是在找到(这里的找到指有这本书并且状态是已借出)后就将这本书的状态改为未借出(将isBorrowed改为false),有但是未被借出就输出该书未被借出,没找到就输出没有。
ReturnBook 类最终代码:
/**
* @Author liangzai
* @Description:
*/
public class ReturnBook implements Ioperate{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
int count = bookList.getSize();
System.out.println("请输入要归还的书名:");
String name = scanner.nextLine();
for (int i = 0; i < count; i++) {
Book book = bookList.getBooks(i);
if(book.getName().equals(name)){
if(book.isaBoolean()){
book.setaBoolean(false);
System.out.println();
return ;
}else{
System.out.println("此书未借出!");
System.out.println();
return ;
}
}
System.out.println("此书不存在!");
System.out.println();
}
}
}
ShowBook类(展示操作)
该类就只需遍历并输出就行。
ShowBook类最终代码:
/**
* @Author liangzai
* @Description:
*/
public class ShowBook implements Ioperate{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
int count = bookList.getSize();
for (int i = 0; i < count; i++) {
Book book = bookList.getBooks(i);
System.out.println(book);
}
System.out.println();
}
}
Exit类(退出操作)
直接调用退出函数就行
Exit 类最终代码:
/**
* @Author liangzai
* @Description:
*/
public class Exit implements Ioperate{
public void work(BookList bookList){
System.out.println("退出系统!");
System.out.println();
System.exit(0);
}
}
Main类
在该类中写一个login函数来确定身份向上转型给User.
main主函数将操作串起来:
/**
* @Author liangzai
* @Description:
*/
public class Main {
public static User login(){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scanner.nextLine();
System.out.println("请选择你的身份:1.管理员 2.普通用户");
int ret = scanner.nextInt();
System.out.println("欢迎"+name+"来到图书管理系统!");
System.out.println();
if(ret==1){
return new Admin(name);
}else {
return new Normal(name);
}
}
public static void main(String[] args) {
BookList bookList = new BookList();
User user = login();
while(true){
int choice = user.menu();
user.doIoperate(choice,bookList);
}
}
}
总结图
这就是整个图书管理系统的结构
想看源码可以进入作者的gitee查看-----liangzai
完结
好了,这期的分享到这里就结束了~
如果这篇博客对你有帮助的话,可以点一个免费的赞并收藏起来~
后面作者将持续更新blog,希望能够得到大家的支持~