图书练习–java
要求
1.实现简单的登录
2.管理员端
①.查找图书
②.新增图书
③.删除图书
④.显示图书
⑤.退出系统
3.普通用户端
①.查找图书
②.借阅图书
③.归还图书
④.退出系统
思路:
1.创建一个图书相关的类:
先创建package book;
①创建book类,表示一本书
public class book {
private String name;
private String author;
private int price;
private String type;
private boolean status;
public book(String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
public void setName(String name) {
this.name = name;
}
public void setAuthor(String author) {
this.author = author;
}
public void setPrice(int price) {
this.price = price;
}
public void setType(String type) {
this.type = type;
}
public void setStatus(boolean status) {
this.status = status;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
public int getPrice() {
return price;
}
public String getType() {
return type;
}
public boolean isStatus() {
return status;
}
@Override
public String toString() {
return "book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", status=" + ((status == true)?" 已经借出 " :" 未借出 ")+
'}';
}
}
②创建booklist类,用来保存N本书
public class booklist {
private book[] books;
private int usedsize;
public booklist() {
this.books = new book[10];
books[0] = new book("三国演义","罗贯中",23,"小说");
books[1] = new book("水浒传","施耐庵",53,"小说");
books[2] = new book("西游记","吴承恩",83,"小说");
this.usedsize = 3;
}
//尾插
public void setBooks(int pos,book book){
this.books[pos] = book;
}
public book getbook(int pos){
return this.books[pos];
}
public int getUsedsize() {
return usedsize;
}
public void setUsedsize(int usedsize) {
this.usedsize = usedsize;
}
}
2.创建操作相关的类:
先创建package operation;
①创建一个接口
//每个操作只是内容不同,但针对的对象是相同的,所以抽象成接口
这里挑了部分代码:
public interface Ioperation {
void work(booklist booklist);
}
②创建一组操作类,每个类都对应一个用户的某一种操作
新增图书
public class Add implements Ioperation {
@Override
public 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("请输入图书的价格");
int price = scanner.nextInt();
System.out.println("请输入图书的类型");
String type = scanner.next();
//新建了一个图书
book book = new book(name,author,price,type);
int currentsize = booklist.getUsedsize();
booklist.setBooks(currentsize,book);
booklist.setUsedsize(currentsize+1);
}
}
借阅图书
public class Borrow implements Ioperation{
@Override
public void work(booklist booklist) {
System.out.println("借阅书籍");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要借阅图书的书名");
String name = scanner.nextLine();
for (int i = 0; i < booklist.getUsedsize(); i++) {
book book = booklist.getbook(i);
if(book.getName().equals(name)){
book.setStatus(true);
System.out.println(book);
return ;
}
}
System.out.println("没有你要借阅的图书");
}
}
查找图书
public class Find implements Ioperation{
@Override
public void work(booklist booklist) {
System.out.println("查找书籍");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要查找的书名");
String name = scanner.nextLine();
for (int i = 0; i < booklist.getUsedsize(); i++) {
book book = booklist.getbook(i);
if(book.getName().equals(name)){
System.out.println("有这本书");
System.out.println(book);
return ;
}
}
System.out.println("没有这本书");
}
}
归还图书
public class Return implements Ioperation{
@Override
public void work(booklist booklist) {
System.out.println("归还书籍");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要归还的书名");
String name = scanner.nextLine();
for (int i = 0; i < booklist.getUsedsize(); i++) {
book book = booklist.getbook(i);
if(book.getName().equals(name)){
book.setStatus(false);
System.out.println(book);
return ;
}
}
System.out.println("没有你要归还的图书");
}
}
3.创建用户相关的类:
先创建package User;
①创建user类,这是一个抽象类
** user是一个抽象类,每个子类只需要做两件事**
** 1.初始化对应的操作数组operations**
** 2.实现meau()方法**
public abstract class user {
public String name;
public Ioperation[] operations;
public user(String name) {
this.name = name;
}
public abstract int meau();
//根据用户选项执行操作
public void dooperation(int chioce, booklist booklist){
this.operations[chioce].work(booklist);
}
}
②创建管理员端的类,是user的子类
public class Adimi extends user{
public Adimi(String name) {
super(name);
this.operations = new Ioperation[]{
new Exit(),
new Find(),
new Add(),
new Delete(),
new Display()
};
}
public int meau(){
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎进入管理员的菜单");
System.out.println("============================");
System.out.println("hello"+ this.name + "欢迎来到图书馆");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("0.退出系统");
System.out.println("============================");
int choice = scanner.nextInt();
return choice;
}
}
②创建普通用户的类,是user的子类
public class Normal extends user{
public Normal(String name) {
super(name); //含参数的构造函数,必须显式调用
this.operations = new Ioperation[]{
new Exit(),
new Find(),
new Borrow(),
new Return()
};
}
public int meau(){
System.out.println("欢迎进入普通用户的菜单");
Scanner scanner = new Scanner(System.in);
System.out.println("============================");
System.out.println("hello"+ this.name + "欢迎来到图书馆");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("0.退出系统");
System.out.println("============================");
int choice = scanner.nextInt();
return choice;
}
}
4.进行整合:
创建main方法,搭建整体逻辑
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 choice = scanner.nextInt();
if(choice == 1){
return new Adimi(name);
}else{
return new Normal(name);
}
}
public static void main(String[] args) {
booklist booklist = new booklist();
//登录并且调用了相应用户的构造函数,构建一个对象,可能是管理员,或者普通用户
user user = login();
while(true) {
//用chioce接收对应操作类的work方法,会调用user 对象引用的 menu方法,并且返回一个chioce
int chioce = user.meau();
//用chioce调用对应操作类的work方法
user.dooperation(chioce, booklist);
}
}
}