文章目录
图书管理系统
- 图书包里面有书籍信息和书架信息,操作的接口
- 功能包里面有查找图书,删除图书,退出系统,增加图书,展示图书,借阅图书,归还图书等功能
普通用户和管理员看到的菜单是不一样的,需要对菜单进行重写
定义成数组,可以更好地组织数据,数组里面存储的是各种类,可以调用的1,2,3,4方法
框架:
先构造一个bookList对象,在构造一个user对象,返回登入的是管理员对象还是普通用户对象,循环里面是每次的(choice)选择,menu对应的是两个对象的动态绑定,doOperation每次调用对应选项的work方法
现在Main函数中调用doOperation方法,再用接口数组调用choice选择的接口对象,用对象调用每个对象中的work方法
接口(Operation)
把实现的功能写到一个接口中,在Operation这个包下面写各种操作的类,来实现接口中的work方法
package operation;
import book.BookList;
public interface IOPeration {
public void work(BookList bookList);
}
package operation;
import book.BookList;
public class FindOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("查找图书!");
}
}
ShowOperation
- 显示图书:把书的信息打印出来,得到有效书的本数,然后遍历书架,得到每本书的信息
package operation;
import book.Book;
import book.BookList;
public class ShowOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("打印图书!");
int useSize = bookList.getUsedSize();
for(int i = 0;i < useSize;i++){
Book book = bookList.getBook(i);
System.out.println(book);
// book重写了toString方法
}
}
}
FindOperation
查找图书:遍历书架,将要找的图书的名字和书架上的书名进行比对,如果有就找到了,并打印信息,最后返回
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class FindOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("查找图书!");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int useSize = bookList.getUsedSize();
for(int i = 0;i < useSize;i++){
Book book = bookList.getBook(i);
if(name.equals(book.getName())) {
System.out.println("找到了这本书,信息如下:");
System.out.println(book);
return;
}
}
System.out.println("没有找到这本书!");
}
}
AddOperation
新增图书:从键盘上输入书的信息,把它放入到书的对象中,最后放到书架的最后一个位置
如果书架满了就放不了数,如果有了同样的书也放不了
package operation;
import book.Book;
import book.BookList;
import user.User;
import java.util.Scanner;
public class AddOperation implements IOPeration{
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("请输入类型:");
String type = scanner.nextLine();
// 把价格放在最后输入,因为价格会有一个回车,
// 会被下一个scanner读到,造成没有输入下一个数据
System.out.println("请输入价格:");
int price = scanner.nextInt();
// 检查数组当中有没有这本书
int useSize = bookList.getUsedSize();
for(int i = 0;i < useSize;i++){
Book book = bookList.getBook(i);
if(name.equals(book.getName())){
System.out.println("有这本书了,不进行存放了!");
return;
}
}
if(useSize == bookList.getBooks().length){
System.out.println("书架满了!");
}
else {
Book book = new Book(name, author, price, type);
bookList.setBook(useSize, book);
// useSize要改变,要加1
bookList.setUsedSize(useSize+1);
}
}
}
ExitOperation
- 退出系统:直接写exit(0)
package operation;
import book.BookList;
public class ExitOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("退出系统!");
System.exit(0);
}
}
DelOperation
- 删除图书:
找到有没有这本书
从后往前覆盖删除这本书
将最后一本书置空
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class DelOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("删除图书!");
// 输入这本书
System.out.println("请输入要删除的书:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
// 如果没有这本书就直接返回
// 如果有这本书就把它的下标记录下来
int useSize = bookList.getUsedSize();
int k = 0;
int i = 0;
for(i = 0;i < useSize;i++){
Book book = bookList.getBook(i);
if(book.getName().equals(name)){
k = i;
break;
}
}
if(i == useSize) {
System.out.println("没有你要删除的图书!");
return;
}
// 从后往前覆盖删除
// 1 2 3 4
Book[] books = bookList.getBooks();
for(int j = k;j < useSize - 1;j++){
books[j] = books[j + 1];
}
books[useSize - 1] = null;
// 将最后一本书置为空,并且有效书的个数减一
bookList.setUsedSize(useSize - 1);
System.out.println("删除成功!");
}
}
BorrowOperation
- 借阅图书:
你要借阅哪本书
你借阅的书有没有
借阅的方式是什么:只需要把isborrow修改为true表示借阅成功,false表示没有借阅
package operation;
import book.BookList;
import book.Book;
import java.util.Scanner;
public class BorrowOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("借阅图书!");
/*
1. 你要借阅哪本书?
2.你借阅的图书在不在?
3.在的话置为true
*/
System.out.println("输入你要借阅的图书:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int useSize = bookList.getUsedSize();
int i = 0;
for(i = 0;i < useSize;i++){
Book book = bookList.getBook(i);
if(name.equals(bookList.getBook(i).getName()) && book.isBorrowed() == false){
book.setBorrowed(true);
System.out.println("借阅成功!");
System.out.println(book);
return;
}
}
if(i == useSize) {
System.out.println("你借阅的图书不存在!");
}
}
}
ReturnOperation
- 归还图书:和借阅图书的思路基本一样,就是修改一下输入的文字信息
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("归还图书!");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要归还的图书:");
String name = scanner.nextLine();
int useSize = bookList.getUsedSize();
int i = 0;
for(i = 0;i < useSize;i++){
Book book = bookList.getBook(i);
if(name.equals(bookList.getBook(i).getName()) && book.isBorrowed() == true){
book.setBorrowed(false);
System.out.println("归还成功!");
System.out.println(book);
return;
}
}
if(i == useSize) {
System.out.println("你归还的图书不存在!");
}
}
}
缺点:
- 没有做到持久化存储
可以存储到文件中,或者存储到数据库中 - 当前用到的只是数组
- 交互的页面是命令行的
以后可以做成是网页的交互
图书最难的点就是框架问题
gitee全部代码