大家好,今天我将来展示简陋版的图书管理系统,其中有很多东西不完善,请多指教。
废话不多说,上代码!
import book.BookList;
import user.AdminUser;
import user.NoramlUser;
import user.User;
import java.util.Scanner;
public class Main {
public static User login() {
Scanner in = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = in.nextLine();
System.out.println("请输入你的身份,1: 管理员 2: 普通用户");
int choice = in.nextInt();
System.out.println("请输入你的操作:");
if(choice==2) {
return new NoramlUser(name);
}
else {
return new AdminUser(name);
}
}
public static void main(String[] args) {
BookList bookList =new BookList();
User user = login();
while(true) {
int choice = user.menu();
user.doOperations(choice, bookList);
}
}
}
这是我们系统的主界面代码,运行后是这样的:
**
**
其中,还可以选择查看图书等操作!!

好,看完了演示,我们来看具体实现,我将采用有宏观到围观的视角来呈现。
- -Booklist and Book 的创建:
Book就是咱图书的类,储存了图书的信息,请看代码:
package book;
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isBorrow = false;
public Book(String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void setIsBorrow(boolean lend) {
isBorrow = lend;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrow='" + isBorrow + '\'' +
'}';
}
}
Book里面还包含一系列的方法,就是从封装类中去得元素的方法!!
接下来看Booklist(书架) 类:
package book;
public class BookList {
private Book[] books = new Book[10];
private int usesize ;
public BookList(){
this.books[0] =new Book("三国演义","罗贯中",20,"小说");
this.books[1] =new Book("西游记","吴承恩",18,"小说");
this.books[2] =new Book("红楼梦","曹雪芹",19,"小说");
this.usesize = 3;
}
public int getUsesize() {
return usesize;
}
在书架中,我们创建了Book数组,每一个都储存这图书的信息,我们还用了构造函数来就地初始化了3个数组元素。方便我们来调试。
好了,book 我们创建好了,接下来就是我们的User类的创建,实现我们的操作人员。这里我们创建了管理员(Adminuse)和 普通用户(normal)的类:
import operation.*;
import java.util.Scanner;
public class AdminUser {
public AdminUser(String name) {
super(name);
}
}
import operation.*;
import java.util.Scanner;
public class NoramlUser extends User{
public NoramlUser(String name) {
super(name);
};
}
``````````````````````````````````````````````````````````````````````````
import operation.*;
import java.util.Scanner;
public class NoramlUser extends User{
public NoramlUser(String name) {
super(name);
};
}
现在我们想一想,管理员与普通用户不都是User嘛?那不就可以继承一个Use来表示相同的元素,这也是继承的本质目的,所以请看代码:
- 先创建一个User类:
package user;
import book.BookList;
import operation.Ioperation;
public abstract class User {
protected String name;
public User(String name) {
this.name = name;
}
}
继承User类:
package user;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
}
}
package user;
import operation.*;
import java.util.Scanner;
public class NoramlUser extends User{
public NoramlUser(String name) {
super(name);
}
}
当我们准备好了以后,就可以开始写我们的Main函数了。我们来打印相关界面:
import book.BookList;
import user.AdminUser;
import user.NoramlUser;
import user.User;
import java.util.Scanner;
public class Main {
public static User login() {
Scanner in = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = in.nextLine();
System.out.println("请输入你的身份,1: 管理员 2: 普通用户");
int choice = in.nextInt();
System.out.println("请输入你的操作:");
if(choice==2) {
return new NoramlUser(name);
}
else {
return new AdminUser(name);
}
}
public static void main(String[] args) {
BookList bookList =new BookList();
User user = login();
}
看,我们写了一个login函数来打印界面,同时还创建了booklist类来实例化书架,然后我们又写了if函数来选择类的对像,login返回值用user来接受,这样实现了不同的登录人的选择。
然后再打印图书菜单,所以我们还要改造User,请看代码:
package user;
import book.BookList;
import operation.Ioperation;
public abstract class User {
protected String name;
protected Ioperation[] ioperations;
public User(String name) {
this.name = name;
}
public abstract int menu();
}
package user;
import operation.*;
import java.util.Scanner;
public class NoramlUser extends User{
public NoramlUser(String name) {
super(name);
}
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("***********************");
Scanner in = new Scanner(System.in);
int choice = in.nextInt();;
return choice;
}
}
package user;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
}
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("***********************");
Scanner in = new Scanner(System.in);
int choice = in.nextInt();;
return choice;
}
}
最后,完成Main代码
import book.BookList;
import user.AdminUser;
import user.NoramlUser;
import user.User;
import java.util.Scanner;
public class Main {
public static User login() {
Scanner in = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = in.nextLine();
System.out.println("请输入你的身份,1: 管理员 2: 普通用户");
int choice = in.nextInt();
System.out.println("请输入你的操作:");
if(choice==2) {
return new NoramlUser(name);
}
else {
return new AdminUser(name);
}
}
public static void main(String[] args) {
BookList bookList =new BookList();
User user = login();
while(true) {
int choice = user.menu();
}
}
}
- 我们接着再创建目标操作类,去完成相应的操作:

再用一个接口统一它们:
package operation;
import book.BookList;
public interface Ioperation {
void work(BookList bookList);
}
package operation;
import book.BookList;
public interface Ioperation {
void work(BookList bookList);
}
这里的work就是用来实现这些方法,现在我们还缺少一个数组来存放这些操作,这就是整合的核心!!! 所以我们要在User里创建一个 Ioperation[] ioperations来存储这些操作!!
package user;
import book.BookList;
import operation.Ioperation;
public abstract class User {
protected String name;
protected Ioperation[] ioperations;
public User(String name) {
this.name = name;
}
public abstract int menu();
public void doOperations(int choice, BookList bookList){
this.ioperations[choice].work(bookList);
}
}
再在User里来写一个gerioperation的方法来用操作!!
在Main中用这个方法:
import book.BookList;
import user.AdminUser;
import user.NoramlUser;
import user.User;
import java.util.Scanner;
public class Main {
public static User login() {
Scanner in = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = in.nextLine();
System.out.println("请输入你的身份,1: 管理员 2: 普通用户");
int choice = in.nextInt();
System.out.println("请输入你的操作:");
if(choice==2) {
return new NoramlUser(name);
}
else {
return new AdminUser(name);
}
}
public static void main(String[] args) {
BookList bookList =new BookList();
User user = login();
while(true) {
int choice = user.menu();
user.doOperations(choice, bookList);
}
}
}
所以要在AdminUser与NormalUser中的构造方法中创建new Ioperation[]
package user;
import operation.*;
import java.util.Scanner;
public class NoramlUser extends User{
public NoramlUser(String name) {
super(name);
this.ioperations = new Ioperation[]{
new operationExit(),
new operationFind(),
new operationRead(),
new operationReturn(),
};
}
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("***********************");
Scanner in = new Scanner(System.in);
int choice = in.nextInt();;
return choice;
}
}
package user;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
this .ioperations = new Ioperation[]{
new operationExit(),
new operationFind(),
new operationAdd(),
new operationDelet(),
new operationScreep(),
};
}
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("***********************");
Scanner in = new Scanner(System.in);
int choice = in.nextInt();;
return choice;
}
}
好了,我们主体写好了,剩下接口中的方法的实现和c语言的数据结构很像:
这是真假图书(operationAdd):
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class operationAdd implements Ioperation{
public void work(BookList bookList){
Scanner in = new Scanner(System.in);
if(bookList.isbookFull()){
System.out.println("书架满了");
}
else {
System.out.println("新增图书:");
System.out.println("请输入你要新增的书名:");
String name = in.nextLine();
System.out.println("请输入你要新增图书色作者:");
String thname = in.nextLine();
System.out.println("请输入你要新增图书的价格:");
int prise = in.nextInt();
System.out.println(in.nextLine());
System.out.println("请输入你要新增图书的类型:");
String type = in.nextLine();
Book book = new Book(name,thname,prise,type);
int currentSize = bookList.getUsesize();
bookList.setBooks(currentSize,book);
bookList.setUsesize(currentSize+1);
System.out.println("新增图书成功");
}
}
}
这是删除图书的代码(operationDele):
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class operationDelet implements Ioperation{
public void work(BookList bookList) {
System.out.println("删除图书!");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
int pos = -1;
int currentusesize = bookList.getUsesize();
int i = 0;
for ( ;i < currentusesize; i++) {
Book book = bookList.getbook(i);
if(book.getName().equals(name)) {
pos = i;
break;
}
}
if(i>=currentusesize){
System.out.println("没有你要找的图书");
return ;
}
for (int j = 0; j < currentusesize-1; j++) {
Book book = bookList.getbook(j+1);
bookList.setBooks(j,book);
}
bookList.setUsesize(currentusesize-1);
bookList.setBooks(currentusesize,null);
System.out.println("删除成功!");
}
}
这是退出系统的代码(operationExit):
package operation;
import book.BookList;
public class operationExit implements Ioperation{
public void work(BookList bookList){
System.out.println("退出系统.....");
for (int i = 0; i < bookList.getUsesize(); i++) {
bookList.setBooks(i,null);
}
System.exit(0);
}
}
这是查找图书的代码(operationFind):
import book.Book;
import book.BookList;
import java.util.Scanner;
public class operationFind implements Ioperation{
public void work(BookList bookList){
System.out.print("查找图书:");
System.out.println("请输入你要查找的书");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
int currentSize = bookList.getUsesize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getbook(i);
if(book.getName().equals(name)){
System.out.println("找到了这本书");
System.out.println(book.toString());
return;
}
}
System.out.println("没有你要找的图书");
}
}
这是借阅图书的代码(operationRead):
import java.util.Scanner;
public class operationRead implements Ioperation{
public void work(BookList bookList){
System.out.println("借阅图书");
System.out.println("请输入要借阅图书的名字:");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
int currentSize = bookList.getUsesize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getbook(i);
if (book.getName().equals(name)) {
book.setIsBorrow(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("借阅失败!");
}
}
这是返回图书的代码:
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class operationReturn implements Ioperation {
public void work(BookList bookList){
System.out.println("借阅图书");
System.out.println("请输入要借阅图书的名字:");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
int currentSize = bookList.getUsesize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getbook(i);
if (book.getName().equals(name)) {
book.setIsBorrow(false);
System.out.println("归还成功!");
return;
}
}
System.out.println("归还失败!");
}
}
这书显示图书的代码(operationScreep):
package operation;
import book.Book;
import book.BookList;
public class operationScreep implements Ioperation {
public void work(BookList bookList){
System.out.println("显示图书");
int currentSize = bookList.getUsesize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getbook(i);
System.out.println(book.toString());
}
}
}
还有这些是实现操作在Book与Booklist里的方法
package book;
public class BookList {
private Book[] books = new Book[10];
private int usesize ;
public BookList(){
this.books[0] =new Book("三国演义","罗贯中",20,"小说");
this.books[1] =new Book("西游记","吴承恩",18,"小说");
this.books[2] =new Book("红楼梦","曹雪芹",19,"小说");
this.usesize = 3;
}
public int getUsesize() {
return usesize;
}
public Book getbook(int pos){
return books[pos];
}
public Boolean isbookFull(){
if(this.usesize ==books.length){
return true;
}
return false;
}
public void setBooks(int pos,Book book) {
books[pos] = book;
}
public void setUsesize(int usesize){
this.usesize = usesize;
}
}
package book;
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isBorrow = false;
public Book(String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
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 int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void setIsBorrow(boolean lend) {
isBorrow = lend;
}
public boolean getIsBorrow() {
return this.isBorrow = isBorrow;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrow='" + isBorrow + '\'' +
'}';
}
}
终于大功告成,我们实现了管理系统,最后给个赞吧,大家加油!!!
本文展示了如何构建一个简陋的图书管理系统,包括Book类、BookList类以及管理员和普通用户的User类实现。介绍了主要功能如图书创建、用户登录选择、菜单操作等。
9404

被折叠的 条评论
为什么被折叠?



