根据设想分设三个包和一个主方法类
要求:开始时输入本人姓名,随后进入用户身份选择(管理员/普通用户),根据身份不同具有不同的操作权
以下为管理员权限:
以下为普通用户权限:
书籍具有5个特征:
- 书本名
- 书本价格
- 书本作者
- 书本类型
- 书本是否借出
且为了便于查询,初始时设置书架中已经预存了三本书:
具体代码:
1.Pacage Book
(1)class Book
package Book;
public class Book {
private String name;
private int price;
private String author;
private String type;
private boolean isBorrowed;
public Book(String name, int price, String author, String type) {
this.name = name;
this.price = price;
this.author = author;
this.type = type;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
public boolean isBorrowed() {
return isBorrowed;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
", type='" + type + '\'' +","+((isBorrowed==false)?"未借出":"已借出")
+'}';
}
}
(2)class BookShelf
package Book;
public class BookShelf {
private Book[] books=new Book[10];
private int usedSize;
public BookShelf() {
this.books[0]=new Book("三国演义",40,"罗贯中","小说");
this.books[1]=new Book("西游记",56,"吴承恩","小说");
this.books[2]=new Book("红楼梦",70,"曹雪芹","小说");
this.usedSize=3;
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
public Book getBooks(int pos) {
return books[pos];
}
public void setBooks(Book book,int pos) {
this.books[pos] = book;
}
public int booklength(){
return books.length;
}
}
2.Pacage User
(1)class User
package User;
import Book.BookShelf;
import ioperation.IOperation;
public abstract class User {
protected String name;
protected IOperation[] iOperations;
public User(String name) {
this.name = name;
}
public abstract int menu();//动态绑定
public void doIoperation(int choice, BookShelf bookShelf){
iOperations[choice].work(bookShelf);
}
}
(2)class AdminUser
package User;
import ioperation.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.iOperations=new IOperation[]{
new Exit(),
new FindOperation(),
new AddOperation(),
new DeleteOperation(),
new ShowOperation()
};
}
public int menu(){
System.out.println("欢迎"+this.name+"来到书管理系统!!!");
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);
System.out.println("请输入你的操作:");
int choice=scanner.nextInt();
return choice;
}
}
(3)class NormalUser
package User;
import ioperation.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.iOperations=new IOperation[]{
new Exit(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
public int menu(){
System.out.println("欢迎"+this.name+"来到书管理系统!!!");
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);
System.out.println("请输入你的操作:");
int choice=scanner.nextInt();
return choice;
}
}
3.Pacage IOperation
(1)Interface IOperation
package ioperation;
import Book.BookShelf;
public interface IOperation {
public void work(BookShelf bookShelf);
}
(2)class FindOperation
package ioperation;
import Book.Book;
import Book.BookShelf;
import java.util.Scanner;
public class FindOperation implements IOperation{
@Override
public void work(BookShelf bookShelf) {
System.out.println("#########查找图书#########");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要查找的图书:");
String name=scanner.nextLine();
int currentSize= bookShelf.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=bookShelf.getBooks(i);
if(book.getName().equals(name)){
System.out.println("找到了!!!!");
System.out.println(book);
return;
}
}
System.out.println("找不到啊,没有你要的书呢亲亲!!!!!!!!!!");
}
}
(3)class AddOperation
package ioperation;
import Book.Book;
import Book.BookShelf;
import java.util.Scanner;
public class AddOperation implements IOperation{
public void work(BookShelf bookShelf){
System.out.println("#########增加图书#########");
//看书架是否满了
int currentSize=bookShelf.getUsedSize();
if(currentSize==bookShelf.booklength()){
System.out.println("书架满了,不能放了,下次再来吧亲亲!!!!!!!!!!");
return;
}
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,price,author,type);
//看里面是否已经存在
for (int i = 0; i < currentSize; i++) {
Book book1=bookShelf.getBooks(i);
if(book1.getName().equals(name)){
System.out.println("书架中已经有这本书了!!!,不能再插入了");
return;
}
}
//都不成立?那就插入
bookShelf.setBooks(book,currentSize);
bookShelf.setUsedSize(currentSize+1);
System.out.println("新增图书成功");
}
}
(4)class BorrowOperation
package ioperation;
import Book.Book;
import Book.BookShelf;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookShelf bookShelf) {
System.out.println("#########借阅图书#########");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入借阅图书书名:");
String name=scanner.nextLine();
int currentSize= bookShelf.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=bookShelf.getBooks(i);
if(book.getName().equals(name)){
if(book.isBorrowed()==true){
System.out.println("已经借出去了");
return;
}
book.setBorrowed(true);
System.out.println("借阅成功");
return;
}
}
System.out.println("找不到啊,没有你要的书呢亲亲!!!!!!!!!!");
}
}
(5)class ReturnOperation
package ioperation;
import Book.Book;
import Book.BookShelf;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookShelf bookShelf) {
System.out.println("#########归还图书#########");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入归还图书书名:");
String name=scanner.nextLine();
int currentSize= bookShelf.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=bookShelf.getBooks(i);
if(book.getName().equals(name)&&book.isBorrowed()==true){
book.setBorrowed(false);
System.out.println("归还成功");
return;
}
}
System.out.println("找不到啊,没有你要归还的书呢亲亲!!!!!!!!!!");
}
}
(6)class ShowOperation
package ioperation;
import Book.Book;
import Book.BookShelf;
public class ShowOperation implements IOperation{
@Override
public void work(BookShelf bookShelf) {
System.out.println("#########显示图书#########");
int currentSize=bookShelf.getUsedSize();
for (int i = 0; i <currentSize; i++) {
Book book=bookShelf.getBooks(i);
System.out.println(book);
}
}
}
(7)class DeleteOperation
package ioperation;
import Book.Book;
import Book.BookShelf;
import java.util.Scanner;
public class DeleteOperation implements IOperation {
@Override
public void work(BookShelf bookShelf) {
System.out.println("#########删除图书#########");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入删除的图书书名:");
String name = scanner.nextLine();
int currentSize = bookShelf.getUsedSize();
int pos = -1;
int i = 0;
for (i = 0; i < currentSize; i++) {
Book book = bookShelf.getBooks(i);
if (book.getName().equals(name)) {
pos = i;
break;
}
}
if (i == currentSize) {
System.out.println("没有要删除的数据");
return;
} else {
for (int j = pos; j < currentSize-1; j++) {//防止越界
Book tmp = bookShelf.getBooks(j + 1);
bookShelf.setBooks(tmp,j);
}
}
System.out.println("删除成功!!!!");
bookShelf.setBooks(null,currentSize-1);
bookShelf.setUsedSize(currentSize-1);
}
}
(8)class Exit
package ioperation;
import Book.BookShelf;
public class Exit implements IOperation{
@Override
public void work(BookShelf bookShelf) {
System.out.println("#########退出系统#########");
System.exit(0);
}
}
4.class Main
import Book.BookShelf;
import User.AdminUser;
import User.NormalUser;
import User.User;
import javax.jws.soap.SOAPBinding;
import java.util.Scanner;
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();
//如果输入1则返回管理员用户,输入2则返回普通用户,返回值向上转型为User
if(choice==1){
return new AdminUser(name);
}else {
return new NormalUser(name);
}
}
public static void main(String[] args) {
BookShelf bookShelf=new BookShelf();
User user=login();
while (true){
int choice=user.menu();
/*根据上述看调用哪个对象,哪个方法
1.哪个对象,login返回值已经说明了调用哪个对象了
2.哪个方法,确定当前对象包含哪些方法
2.1在调用对应子类的对象时,构造函数会初始化好对应的操作
2.2怎么具体调用
*/
user.doIoperation(choice,bookShelf);
}
}
}
4.后续扩展:
1.每次运行程序 上次运行的结果,比如新增的图书,可能没有了。所以想存储数据,有以下几个思路:
- a.换成文件 存储到文件当中。-->磁盘上了-> 文件的读取 I/O流
- b.换成数据库 MySQL。--> 存储到MySQL里面 -->磁盘 -->每次运行程序读取数据库就好了
2.后续EE之后 可以实现为WEB端的一个小练习。
- a.加入网页
- b.加入框架
3.功能上也可以扩展。
- 给书 按照 书名排序
- 给书 按照 价格排序
- 给书 按照 作者名排序