赞
踩
请看如下动图:
程序一运行:开始先输入名字,在输入身份是否为管理员还是普通用户,最终就是一些操作了。这就是要做的简单图书管理系统了,心理暗自说:还是蛮简单的嘛,嘿嘿嘿。重点是学Java面向对象的开发思想哟!!!对象与对象之间的联系。
用户: 管理员 普通用户
书:Book 书架
一些操作: 操作的是书架
三大模块:用户模块,书架模块,管理操作模块
用户分为管理员和普通用户,可以抽象出一个公共的类:User(abstract) 其子类有Admin,NormalUser。放入一个包User中。
User
package User; import Book.Bookshelf; import Operation.IOOperation; public abstract class User { //用户名 protected String name; //用户的管理操作 protected IOOperation[] operations; public User(String name) { this.name = name; } //抽象的菜单方法,应为不同的用户有不同的实现菜单方式,返回值为int 返回 你要选择那个? public abstract int menu(); //不同的用户,不是也有不同的操作吗? //注意:操作的是书架 //答:采用了多态 public void doOperation(int option,Bookshelf bookshelf) { operations[option].work(bookshelf); } }
Admin
package User; import Operation.*; import java.util.Scanner; public class Admin extends User{ public Admin(String name) { super(name); //不同的用户操作不同,直接在用户初始化时,就决定了有那些操作了--->直接赋值 this.operations = new IOOperation[]{ new ExitSystemOperate(), new FindBookOperate(), new AddBookOperate(), new DeleteBookOperate(), new ShowBookOperate(), }; } //重写自己的菜单方法 @Override 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("********************"); System.out.println("请输入选项:"); Scanner s = new Scanner(System.in); int option = s.nextInt(); return option; } }
NormalUser:
package User; import Operation.*; import java.util.Scanner; public class NormalUser extends User{ public NormalUser(String name) { super(name); this.operations = new IOOperation[]{ new ExitSystemOperate(), new FindBookOperate(), new BorrowBookOperate(), new BackBookOperate() }; } 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("********************"); System.out.println("请输入选项:"); Scanner s = new Scanner(System.in); int option = s.nextInt(); return option; } }
书类:
package Book; public class Book { private String name; //书名 private String author; //作者 private double price; //价格 private String type; //类型 private Boolean isBorrow; //是否借出 //isBorrow 不能出现在构造方法中,书的借出是要看有人借了才是借出状态,且全局变量初始就是false public Book(String name, String author, double price, String type) { this.name = name; this.author = author; this.price = price; this.type = type; this.isBorrow = false; } 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 double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Boolean getBorrow() { return isBorrow; } public void setBorrow(Boolean borrow) { isBorrow = borrow; } //重写toString方法,输出时更看得懂,更好看些,用来展示书本的功能! @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ", "+(isBorrow==true?"已借出":"在馆")+ '}'; } }
书架:
package Book; public class Bookshelf { //书架采用数组的形式存储书本,整个系统的操作都在维系着这个书数组!!! private Book[] bookList = new Book[10]; //书数组已经使用的空间 private int usedSize; //我们在这里,对书架初始化时就先放入了三本书了,这就是为什么上述动图,一查看书就有三本书了。 public Bookshelf() { this.bookList[0] = new Book("三国演义","罗贯中",9.9,"小说"); this.bookList[1] = new Book("西游记","吴承恩",19.9,"小说"); this.bookList[2] = new Book("红楼梦","曹雪芹",29.9,"小说"); this.usedSize = 3; } public Book[] getBookList() { return bookList; } //书是一本本存入 public void setBook(Book book) { this.bookList[this.usedSize] = book; this.usedSize++; } //取书的话,要看书的位置(下标) public Book getBook(int pos) { return this.bookList[pos]; } public int getUsedSize() { return usedSize; } public void setUsedSize(int usedSize) { this.usedSize = usedSize; } }
这么多的操作,就要用到接口IOOperation了has a 有这种操作work(),对书架的操作,书架里有书的数组work(Bookshelf bookshelf)!!!
IOOperation
package Operation;
import Book.Bookshelf;
public interface IOOperation {
void work(Bookshelf bookshelf);
}
增加一本书
package Operation; import Book.*; import java.util.Scanner; public class AddBookOperate implements IOOperation{ @Override public void work(Bookshelf bookshelf) { Scanner s = new Scanner(System.in); System.out.println("新增图书........"); System.out.println("请输入书名:"); String name = s.nextLine(); Book[] books = bookshelf.getBookList(); //判断图书已满吗? if(bookshelf.getUsedSize()==bookshelf.getBookList().length) { System.out.println("馆里图书已满,不能新增图书!"); return; } //判断书是否已经存在了 for (int i = 0; i < bookshelf.getUsedSize(); i++) { if(name.equals(books[i].getName())) { System.out.println("图书管已存在"+"《"+name+"》"+",新增失败!"); return; } } //不存在,即可新增! System.out.println("请输入输入作者:"); String author = s.nextLine(); System.out.println("请输入输入价格:"); double price = s.nextDouble(); System.out.println("请输入输入书的类型:"); s.nextLine(); String type = s.nextLine(); Book book = new Book(name,author,price,type); bookshelf.setBook(book); bookshelf.setUsedSize(bookshelf.getUsedSize()+1); System.out.println("新增图书"+name+"成功!"); } }
删除一本书
package Operation; import Book.Book; import Book.Bookshelf; import java.util.Scanner; public class DeleteBookOperate implements IOOperation{ public void work(Bookshelf bookshelf) { System.out.println("删除图书........"); System.out.println("请输入你要删除的图书:"); Scanner s = new Scanner(System.in); String name = s.nextLine(); Book[] books = bookshelf.getBookList(); Boolean isBook = false; int pos = -1; //判断图书是否存在 for (int i = 0; i < bookshelf.getUsedSize(); i++) { if(name.equals(books[i].getName())) { isBook = true; pos = i; } } //不存在 if(isBook==false) { System.out.println("删除图书失败。"+"馆里还没有这本 "+name+" 书"); } else { //存在就删除这本我不想要的书 //以下为从数组删除这本书的方法 //如果为最后一本图书,特判,直接置为null if(pos==bookshelf.getUsedSize()-1) { books[pos] = null; } else{ //不是最后一本,则按这种算法 for (int i = pos; i < bookshelf.getUsedSize()-1; i++) { if(name.equals(books[i].getName())) { books[i] = books[i+1]; } } } //最后修改使用的大小 bookshelf.setUsedSize(bookshelf.getUsedSize()-1); } } }
展示所有的书
package Operation; import Book.Book; import Book.Bookshelf; public class ShowBookOperate implements IOOperation{ public void work(Bookshelf bookshelf) { System.out.println("显示图书........"); Book[] books = bookshelf.getBookList(); //遍历打印 for (int i = 0; i < bookshelf.getUsedSize(); i++) { System.out.println(books[i]); } } }
退出图书馆里系统
package Operation;
import Book.Bookshelf;
public class ExitSystemOperate implements IOOperation{
public void work(Bookshelf bookshelf) {
System.out.println("退出图书系统........");
System.exit(0);
}
}
借一本书
package Operation; import Book.Book; import Book.Bookshelf; import java.util.Scanner; public class BorrowBookOperate implements IOOperation{ @Override public void work(Bookshelf bookshelf) { System.out.println("借阅图书........"); Scanner s = new Scanner(System.in); System.out.println("请输入你要借阅的图书:"); String name = s.nextLine(); Book[] books = bookshelf.getBookList(); for (int i = 0; i < bookshelf.getUsedSize(); i++) { if(name.equals(books[i].getName()) ) { if(books[i].getBorrow()==false) { //如果馆里有这本书,且还没被借走! System.out.println("借阅"+name+"成功!"); books[i].setBorrow(true); return; } System.out.println("借阅失败。"+name+" 已被借出。"); return; } } System.out.println("借阅失败。"+"馆里还没有这本 "+name+" 书"); } }
归还一本书
package Operation; import Book.Book; import Book.Bookshelf; import java.util.Scanner; public class BackBookOperate implements IOOperation{ @Override public void work(Bookshelf bookshelf) { System.out.println("归还图书........"); Scanner s = new Scanner(System.in); System.out.println("请输入你要归还的图书:"); String name = s.nextLine(); Book[] books = bookshelf.getBookList(); //遍历书架,看是否有归还的这本书。总不能不是我们管的书,我还收下吧!!! for (int i = 0; i < bookshelf.getUsedSize(); i++) { if(name.equals(books[i].getName())) { System.out.println("归还"+name+"成功!"); books[i].setBorrow(false); return; } } System.out.println("归还失败。"+"馆里还没有这本 "+name+" 书"); } }
查找一本书
package Operation; import Book.Book; import Book.Bookshelf; import java.util.Scanner; public class FindBookOperate implements IOOperation{ public void work(Bookshelf bookshelf) { System.out.println("查找图书........"); Scanner s = new Scanner(System.in); System.out.println("请输入要查找的图书:"); String name = s.nextLine(); //遍历书架 Book[] books = bookshelf.getBookList(); for (int i = 0; i < bookshelf.getUsedSize(); i++) { if(name.equals(books[i].getName())) { System.out.println(books[i]); return; } } System.out.println("馆里还没有这本 "+name+" 书"); } }
退出图书馆里系统,和Admin一样的。
整个系统都在围绕书数组,所以要先new Bookshelf()。
在根据用户是什么身份,给其new 什么身份,再获取用户要进行那个操作,穿个给doOperation(option,bookshelf)。
import Book.*; import User.*; import java.util.Scanner; public class Test { public static User log() { System.out.println("请输入你的姓名:"); Scanner s = new Scanner(System.in); String name = s.nextLine(); System.out.println("请输入你的身份: 1:管理员 2:普通用户"); int id = s.nextInt(); System.out.println("欢迎"+name+"来到图书管理系统"); if(id==1) { return new Admin(name); } else if(id==2) { return new NormalUser(name); } else { System.out.println("输入错误,请重新输入!"); return null; } } public static void main(String[] args) { Bookshelf bookshelf = new Bookshelf(); User user = log(); while(true) { int option = user.menu(); user.doOperation(option,bookshelf); } } }
怎么进行数据的保存,数据库。
功能拓展:书名,价格,作者名排序
感谢铁子能看到这里。希望有所收获,如果有哪些不对的地方还请大方指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。