Java编写 总结所学
第一部分 实现TestMain测试区
import book.BookList;
import user.Admin;
import user.NormalUser;
import user.User;
import java.util.Scanner;
public class TestMain {
//利用向上转型 返回值设置为User来接收
//返回一个对象
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();
if (choice==1){
//返回Admin这个对象
return new Admin(name);
} else {
//返回NormalUser这个对象
return new NormalUser(name );
}
}
public static void main(String[] args) {
//准备书籍
BookList bookList = new BookList();
//登录 user接收的引用是Admin或NormalUser
User user = login();
//发生多态
//这个菜单到底是什么取决于返回的到底是什么
//如果user引用Admin 那么就调用它的菜单 反之调用NormalUser
while (true) {
//user.menu()表示调用菜单
//看login引入的是哪个对象
//如果引入的是Admin 那么这个doOperation访问的就是Admin中的菜单了
//choice用来接收用户输入的哪一个操作值
int choice = user.menu();
//调用这个 传参
//
user.doOperation(bookList, choice);
}
}
}
第二部分 实现包book
1.实现包中的Java类 Book
package book;
public class Book {
private String name;
private String author;
private int price;
private String type;//书的类型
private boolean isBorrowed;//是否被借出
public Book(String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
//提供set和get接口
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 boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + ''' +
", author='" + author + ''' +
", price=" + price +
", type='" + type + ''' +
", isBorrowed=" + isBorrowed +
'}';
}
}
2.实现包中类BookList
package book;
//图书清单
public class BookList {
//开辟一块储存图书的空间
private Book[] books=new Book[100];
private int usedSize=0;
public BookList(){
books[0]=new Book("三国演义","罗贯中",100,"小说");
books[1]=new Book("水浒传","施耐庵",100,"小说");
books[2]=new Book("西游记","吴承恩",100,"小说");
this.usedSize=3;
}
public void setBooks(int pos,Book book){
//调用books这个数组存放书
this.books[pos]=book;
}
//当你想要查看一本书的时候
// 输入它的位置 我们即可返回它
public Book getBook(int pos){
return this.books[pos];
}
//对usedSize实现构造方法
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
}
第三部分 实现user包
1.实现包中User主类
package user;
import book.BookList;
import opertion.IOperation;
public abstract class User {
protected String name;
//定义一个数组
protected IOperation[] operations;
public User(String name) {
this.name = name;
}
public abstract int menu();
public void doOperation(BookList bookList,int choice){
//我们通过这个数组choice下标.work()来调用opertion包中的对象
//当choice为多少时 调用AddOperation等等
// 并且所有的对象都有一个work方法因此我们再调用work方法即可
// 参数为bookList
this.operations[choice-1].work(bookList);
}
}
2.实现User子类Admin
package user;
import opertion.*;
import java.util.Scanner;
public class Admin extends User{
public Admin(String name) {
super(name);
//构造出数组中所有的元素
this.operations=new IOperation[]{
new FindOperation(),
new AddOperation(),
new DelOperation(),
new DisplayOperation(),
new ExitOperation(),
};
}
@Override
public int menu() {
System.out.println("_____________________________");
//我们已经super调用了属性name 因此我们这里可以直接this.name进行引用
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("5.退出系统");
System.out.println("______________________________");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
//这里我们要返回一个整数 因此我们要改变返回值的类型
//抽象类的也要改变
return choice;
}
}
3.实现另外一个User子类NormalUser
package user;
import opertion.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
//构造出数组中所有的元素
this.operations=new IOperation[]{
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
new ExitOperation()
};
}
@Override
public int menu() {
System.out.println("_____________________________");
//我们已经super调用了属性name 因此我们这里可以直接this.name进行引用
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("______________________________");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
//这里我们要返回一个整数 因此我们要改变返回值的类型
//抽象类的也要改变
return choice;
}
}
第四部分 实现包operation
1.实现一个接口IOperation
package opertion;
import book.BookList;
public interface IOperation {
void work(BookList bookList);
}
2.实现包类AddOperation
package opertion;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
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("请输入图书的价格");
int price=scanner.nextInt();
System.out.println("请输入图书的类型");
String type=scanner.next();
//
Book book=new Book(name,author,price,type);
//利用尾插法
int curSize=bookList.getUsedSize();
//在主函数中new出了 引用bookList
//通过引用bookList
bookList.setBooks(curSize,book);
//每加一本书 数量加一
bookList.setUsedSize(curSize+1);
System.out.println("新增成功");
}
}
3.BorrowOperation
package opertion;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("借阅图书");
//输入你要借阅的名字
Scanner scanner=new Scanner(System.in);
System.out.println("请输入图书的名字:");
String name=scanner.nextLine();
for(int i=0;i
4.DelOperation
package opertion;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("删除图书");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要删除的图书名称");
String name=scanner.nextLine();
int i=0;
for(i=0;i
5.DisplayOperation
package opertion;
import book.Book;
import book.BookList;
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("显示图书");
//为了显示所有图书
for(int i=0;i
6.ExitOperation
package opertion;
import book.BookList;
public class ExitOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("退出系统");
//退出系统的标志
System.exit(1);
}
}
7.FindOperation
import book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("查找图书");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入图书的名字:");
String name=scanner.nextLine();
for(int i=0;i
8.ReturnOperation
package opertion;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("归还图书");
Scanner scanner=new Scanner(System.in);
System.out.println("请输入您要归还的书名");
String name=scanner.nextLine();
for(int i=0;i
总结一下:
路还很长
慢慢来吧



