现在我们用面向对象编程,首先我们要明确这个图书管理系统的对象有哪些?
图书管理需要管理图书(对象1),在哪管理图书呢?书架(对象2)上
然后由谁来管呢?有两类人,一类是:图书管理员(对象3)。另一类:普通用户人员(对象4)。
不同的人的权限不一样。
管理员的权限:
1.查找图书(对象5)
2.新增图书(对象6)
3.删除图书(对象7)
4.显示图书(对象8)
0,退出系统(对象9)
普通用户的权限:1.查找图书
2.借阅图书(对象10)
3.归还图书(对象11)
0,退出系统
一个对象就是一个类:
1.先实现书和书架:
book类:
public class Book {
private String name;//书的名字
private String author;//书作者的名字
private int price;//书的价格
private String type;//书的类型
private boolean isBorrowed;//书的状态
@Override
public String toString() {//book中的toString方法,用来显示书的相关信息
return "Book{" +
"书名:'" + name + '\'' +
", 作者:'" + author + '\'' +
", 价格:" + price +
", 类型:'" + type + '\'' +
(isBorrowed==true?" 已借出":" 未借出") +
'}';
}
public Book(String name, String author, int price, String type) {//构造方法,用来初始化book
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 setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}//设置书的是否借出的状态
public String getName() {
return name;
}//得到书的名字
public String getAuthor() {
return author;
}//得到书的作者的名字
public int getPrice() {
return price;
}//得到书的价格
public String getType() {
return type;
}//得到书的的类型
public boolean isBorrowed() {
return isBorrowed;
}//得到书的是否借出的状态
}
bookList类:
public class bookList {
private Book[] books=new Book[10];//用一个数组用来储存书本
private int usesize;//书架上的有效书的本数
public bookList(){//初始化书架上的书,最开始有三本默认的书
books[0]=new Book("三国演义","罗贯中",10,"小说");
books[1]=new Book("西游记","吴承恩",59,"小说");
books[2]=new Book("红楼梦","曹雪芹",16,"小说");
this.usesize=3;
}
public Book getBooks(int pos) {
return books[pos];
}//取得书架上对应下标的书
public int getUsesize() {
return usesize;
}//取得书架上有效书本的数量
public void setBooks(int i,Book book) {
this.books[i] = book;
}//修改书架上对应下标的书
public void setUsesize(int usesize) {
this.usesize = usesize;
}//修改书架上有效书的数量
public Book[] getBooks() {//取得数组,方便遍历书架上的所有书
return books;
}
public int getInstance(String book) {//
for (int i = 0; i <usesize ; i++) {
if(book.equals(books[i].getName())){
return i;
}
}
return -1;
}
public void swap(Book n1,Book n2){//交换对应下标n1和n2的书
n1.setName(n2.getName());
n1.setAuthor(n2.getAuthor());
n1.setPrice(n2.getPrice());
n1.setType(n2.getType());
n1.setBorrowed(n2.isBorrowed());
}
}
2.实现用户类:
User(父类,抽象类):
public abstract class User {
protected String name;
protected Listoperation[] operation;
public User(String name){
this.name=name;
}
public abstract int menu();
public abstract void dooperation(int choice,bookList booklist);
}
User中menu的抽象方法用来打印菜单的,因为对应不同的用户有不同的权限。
administorUser类(管理员类):
1.第一类用户是管理员:
public class administorUser extends User{
public administorUser(String name) {
super(name);
operation=new Listoperation[]{new exitoperation()
,new FIndoperation(),
new Addoperation(),
new Deletoperation(),
new Showoperation()};
}
public int menu(){
System.out.println("欢迎"+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);
System.out.println("请输入你的操作:");
int x=scanner.nextInt();
return x;
}
public void dooperation(int choice, bookList booklist) {
operation[choice].work(booklist);
}
}
nomalUser类:
2.第二类用户是普通用户:
public class nomalUser extends User{
public nomalUser(String name) {
super(name);
operation=new Listoperation[]{new exitoperation()
,new FIndoperation(),
new Borrowoperation(),
new returnoperation()};
}
public int menu(){
System.out.println("欢迎"+name+"来到图书管理系统");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("0,退出系统");
Scanner scanner =new Scanner(System.in);
System.out.println("请输入你的操作:");
int x=scanner.nextInt();
return x;
}
@Override
public void dooperation(int choice, bookList booklist) {
operation[choice].work(booklist);
}
}
3.实现对应的所有方法:
1.创建一个接口:Listoperation
public interface Listoperation {
void work(bookList booklist);
}
2.增添图书:Addoperation
public class Addoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("增添图书...");
Scanner sc=new Scanner(System.in);
if(booklist.getBooks().length==booklist.getUsesize()){
System.out.println("书架已满,放不下了");
return ;
}
System.out.println("请输入书名:");
String name=sc.nextLine();
for (int i = 0; i < booklist.getUsesize(); i++) {
if(name.equals(booklist.getBooks(i).getName())){
System.out.println("书架上已经有这本书");
return ;
}
}
System.out.println("请输入作者的名字:");
String author=sc.nextLine();
System.out.println("请输入该小说的类型:");
String type=sc.nextLine();
System.out.println("请输入该书的价格:");
int price= sc.nextInt();
Book newbook=new Book(name,author,price,type);
booklist.setBooks(booklist.getUsesize(),newbook);
booklist.setUsesize(booklist.getUsesize()+1);
System.out.println("插入成功");
return ;
}
}
3.借阅图书:Borrowoperation
public class Borrowoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("借阅图书...");
System.out.println("请输入你要借阅的图书的名字:");
Scanner sc=new Scanner(System.in);
String name=sc.nextLine();
for (int i = 0; i < booklist.getUsesize(); i++) {
Book book=booklist.getBooks(i);
if(book.isBorrowed()==true){
System.out.println("该书已经被借出");
return ;
}
if(book.getName().equals(name)){
book.setBorrowed(true);
System.out.println("借阅成功");
return ;
}
}
System.out.println("未找到你要借阅的书");
return ;
}
}
4.删除图书:Deletoperation
public class Deletoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("删除图书...");
Scanner sc=new Scanner(System.in);
if(booklist.getUsesize()==0){
System.out.println("书架上没有书,删除失败");
return ;
}
System.out.println("请输入要删除的书名:");
String name=sc.nextLine();
int x= booklist.getInstance(name);
for (int i = x; i < booklist.getUsesize()-1; i++) {
booklist.swap(booklist.getBooks(i),booklist.getBooks(i+1));
}
booklist.setUsesize(booklist.getUsesize()-1);
System.out.println("删除成功");
}
}
5.退出系统:exitoperation
public class exitoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("退出系统...");
System.exit(0);
}
}
6.查找图书:FIndoperation
public class FIndoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("查找图书...");
System.out.println("请输入你要查找的图书的名字:");
Scanner sc=new Scanner(System.in);
String name=sc.nextLine();
for (int i = 0; i < booklist.getUsesize(); i++) {
Book book=booklist.getBooks(i);
if(book.getName().equals(name)){
System.out.println("找到了");
System.out.println(book);
return ;
}
}
System.out.println("未找到此书");
return ;
}
}
7.归还图书:returnoperation
public class returnoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("归还图书...");
System.out.println("请输入你要归还的图书的名字:");
Scanner sc=new Scanner(System.in);
String name=sc.nextLine();
for (int i = 0; i < booklist.getUsesize(); i++) {
Book book=booklist.getBooks(i);
if(book.getName().equals(name)){
book.setBorrowed(false);
System.out.println("归还图书成功");
return ;
}
}
System.out.println("未找到需要归还的书");
return ;
}
}
8.展示图书:Showoperation
public class Showoperation implements Listoperation{
@Override
public void work(bookList booklist) {
System.out.println("显示图书...");
for (int i = 0; i < booklist.getUsesize(); i++) {
Book book=booklist.getBooks(i);
System.out.println(book);
}
}
}