个人感觉java的面向对象的思想比c++的更加深刻一些
首先是Main类
import books.Book;
import books.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;
public class Main {
public static User logIn()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名");
String name = sc.nextLine();
System.out.println("请输入你的身份--0->普通用户 1->管理员");
int choice = sc.nextInt();
if(choice == 0)
{
return new NormalUser(name);
}
else
{
return new AdminUser(name);
}
}
public static void main(String[] args) {
BookList booklist = new BookList();
User user = logIn();//这里通过多态对于使用者的身份的识
//直接返回的是对象一开始就确定了身份
//根据choice来调用指定的操作
while(true) {
int choice = user.menu();//利用堕胎进行实现
user.doOperation(choice, booklist);
}
}
}
之后是book和booklist类
package books;
public class Book {
private String name;
private String autor;
private int price;
private String type;
private boolean isLend;
public Book(String name, String autor, int price, String type) {
this.name = name;
this.autor = autor;
this.price = price;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAutor() {
return autor;
}
public void setAutor(String auto) {
this.autor = autor;
}
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;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", autor='" + autor + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isLend=" + isLend +
'}';
}
public boolean isLend() {
return isLend;
}
public void setLend(boolean lend) {
isLend = lend;
}
}
package books;
public class BookList {
private Book []books = new Book[100];
private int size;
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public BookList() {
books[0] = new Book("三国演义","罗贯中",45,"小说");
books[1] = new Book("水浒传","吴承恩",45,"小说");
this.size = 2;
}
public Book getBook(int pos)
{
return this.books[pos];
}
public void addBook(Book b)
{
this.books[this.size++] = b;
}
public int find(String name)
{
for(int i = 0; i < this.size; i++)
{
if(books[i].getName().equals(name))
return i;
}
return -1;
}
public void del(int idx){
if(idx == this.size - 1)
{
this.size--;
return;
}
for(int i = this.size - 1; i > idx; i--){
this.books[i - 1]= this.books[i];
}
this.size--;
}
public void setLend(int idx){
this.books[idx].setLend(true);
}
public void setReturn(int idx){
this.books[idx].setLend(false);
}
}
之后是相应的操作,其中首先实现操作接口规范操作类,在子类中重写方法即可
//Addoperation
package operation;
import books.Book;
import books.BookList;
import java.util.Scanner;
//利用接口进行操作的统一
public class AddOperation implements IOoperation{
@Override
public void work(BookList bl) {
System.out.println("新增图书");
Scanner src = new Scanner(System.in);
System.out.println("请输入图书的名称");
String name = src.nextLine();
System.out.println("请输入图书的作者");
String author = src.nextLine();
System.out.println("请输入图书的类型");
String type = src.nextLine();
System.out.println("请输入图书的价格");
int price = src.nextInt();//不建议在int之后直接输入string
bl.addBook(new Book(name,author,price,type));
System.out.println("加入成功");
}
}
//BorrowOperation
package operation;
import books.BookList;
import java.util.Scanner;
/**
* @autor jiaxiuze
* @date 2023/4/29 21:31
*/
public class BorrowOperation implements IOoperation{
@Override
public void work(BookList bl) {
System.out.println("借图书");
System.out.println("请输入你要借阅图书的名称");
Scanner src = new Scanner(System.in);
String name = src.nextLine();
int idx = bl.find(name);
if(idx == -1)
{
System.out.println("没有这本书");
return;
}
else if(bl.getBook(idx).isLend() == true){
System.out.println("该书已被借阅");
return;
}
bl.setLend(idx);
System.out.println("借阅成功");
}
}
//
//DelOperarion
package operation;
import books.BookList;
import java.util.Scanner;
public class DelOperation implements IOoperation{
@Override
public void work(BookList bl) {
System.out.println("删除图书");
System.out.println("请输入要删除的图书");
Scanner src = new Scanner(System.in);
String name = src.nextLine();
int idx = bl.find(name);
if(idx == -1)
{
System.out.println("没有相应书籍,无法删除");
return;
}
bl.del(idx);
System.out.println("删除成功");
}
}
//ExitOperation
package operation;
import books.BookList;
public class ExitOperation implements IOoperation{
@Override
public void work(BookList bl) {
System.out.println("退出系统");
System.exit(0);//直接退出即可
}
}
//
//findOperation
package operation;
import books.BookList;
import java.util.Scanner;
public class FindOperation implements IOoperation{
@Override
public void work(BookList bl) {
System.out.println("查找图书");
System.out.println("请输入你要查找的图书");
Scanner src = new Scanner(System.in);
String name = src.nextLine();
int idx = bl.find(name);
if(idx == -1)
{
System.out.println("没有该书籍");
return;
}
System.out.println(bl.getBook(idx));
}
}
//
//ReturnOperation
package operation;
import books.BookList;
import java.util.Scanner;
public class ReturnBook implements IOoperation{
@Override
public void work(BookList bl) {
System.out.println("归还图书");
System.out.println("请输入你要归还图书的名称");
Scanner src = new Scanner(System.in);
String name = src.nextLine();
int idx = bl.find(name);
if(idx == -1){
System.out.println("没有查询到书籍");
return;
}
if(bl.getBook(idx).isLend() == false)
{
System.out.println("该图书已被归还");
return;
}
bl.setReturn(idx);
System.out.println("归还成功");
}
}
///
//showOperation
package operation;
import books.BookList;
import java.util.function.IntPredicate;
public class ShowOperation implements IOoperation {
@Override
public void work(BookList bl) {
System.out.println("显示图书");
int size = bl.getSize();
for(int i = 0; i < size; i++)
{
System.out.println(bl.getBook(i));
}
}
}
最后是uesr,和operation一样的套路
//
//Adminuser
package user;
import operation.*;
import java.awt.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name)
{
super(name);
//数组中的每一个元素都是一个对象
this.operations = new IOoperation[]{
new ExitOperation(),
new FindOperation(),
new AddOperation(),
new DelOperation(),
new ShowOperation()
};
}
@Override
public int menu() {
System.out.println("管理员菜单");
System.out.println("**************************");
System.out.println("hello " + this.name + "欢迎来到图书小练习");
System.out.println("1、查找图书");
System.out.println("2、新增图书");
System.out.println("3、删除图书");
System.out.println("4、显示图书");
System.out.println("0、退出系统");
Scanner src = new Scanner(System.in);
int choice = src.nextInt();
return choice;
}
}
//
//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 ExitOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnBook()
};
}
@Override
public int menu() {
System.out.println("普通用户菜单");
System.out.println("*******************************");
System.out.println("hello " + super.name + "欢迎来到图书小练习");
System.out.println("1、查找图书");
System.out.println("2、借阅图书");
System.out.println("3、归还图书");
System.out.println("0、退出系统");
System.out.println("请输入你的操作");
Scanner src = new Scanner(System.in);
int choice = src.nextInt();
return choice;
}
}
最后是Operation的接口
package operation;
import books.BookList;
/**
* @autor jiaxiuze
* @date 2023/4/29 21:26
*/
public interface IOoperation {
void work(BookList bl);
//接口进行规范标准
}
运行截图:
基本上就这样,谢谢观看。