练习知识点:
java类,面向对象,抽象类,接口,封装,继承,多态,顺序表

练习通过封装抽象类user以及操作接口来实现多态,目的是将图书管理人员和普通用户区分开,以及将不同权限的人操作区分开.

文章目录

  • 1.书籍,书架包
    • 书籍类
    • 书架类
  • 2.操作包
    • 操作接口
    • 增加
    • 删除
    • 显示
    • 查找
    • 借阅
    • 归还
    • 退出
  • 3.用户管理包
    • 用户抽象类
    • 超级用户
    • 普通用户
  • 4.主函数,程序入口
  • 5.代码位置

1.书籍,书架包

书籍类

package book;public class Book {private String name;private String author;private double price;private String type;private boolean isBorrow;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 isBorrow() {return isBorrow;}public void setBorrow(boolean borrow) {isBorrow = borrow;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +(this.isBorrow ?", 已借出":", 未借出")+'}';}
}

书架类

package book;import java.util.Arrays;public class BookList {private Book[] books;private int usenum;//书本个数private int capacity;public Book[] getBooks() {return books;}public BookList(){this.books=new Book[]{new Book("小王子","安托万·德·圣-埃克苏佩",34.5,"童话")};usenum=1;capacity=1;}public int getUsenum() {return usenum;}public int findBook(String name){for(int i=0;i<usenum;i++){if(books[i].getName().equals(name)){return i;}}return -1;}public void setUsenum(int usenum) {this.usenum = usenum;}public Book GetPos(int pos){if(pos>usenum){return null;}return this.books[pos];}public void addBook(Book book){if(usenum==capacity){this.books=Arrays.copyOf(this.books,2*capacity);capacity*=2;System.out.println("扩容成功");}this.books[usenum]=book;usenum++;}
}

2.操作包

操作接口

package operation;import book.BookList;public interface Operation {void work(BookList bookList);
}

增加

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class AddOperation implements Operation{public void work(BookList booklist){String name;String author;double price;String type;Scanner io=new Scanner(System.in);System.out.println("书名:");name=io.nextLine();System.out.println("作者: ");author=io.nextLine();System.out.println("书籍类型: ");type=io.nextLine();System.out.println("价格: ");price=io.nextDouble();Book book=new Book(name,author,price,type);booklist.addBook(book);System.out.println("添加图书成功!");//System.out.println(booklist.getUsenum());}
}

删除

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DelOperation implements Operation{public void work(BookList booklist){Scanner io=new Scanner(System.in);System.out.println("输入要删除的书名:");String name=io.nextLine();int pos=booklist.findBook(name);Book[] books=booklist.getBooks();if(pos!=-1){int size=booklist.getUsenum();for (int i = pos; i < size-1; i++) {books[i] = books[i + 1];}booklist.setUsenum(size-1);System.out.println("删除成功");}else{System.out.println("没有找到"+name+"这本书");}}
}

显示

package operation;import book.BookList;public class DisplayOperation implements Operation{public void work(BookList booklist){int size=booklist.getUsenum();if(size==0){System.out.println("书架为空");return;}for(int i=0;i<size;i++){System.out.println(booklist.GetPos(i));}}
}

查找

package operation;import book.BookList;import java.util.Scanner;public class FindOperation implements Operation{public void work(BookList booklist){Scanner io=new Scanner(System.in);int size=booklist.getUsenum();if(size==0){System.out.println("书架为空!");return;}System.out.println("输入要查找的书名: ");String name=io.nextLine();int pos=booklist.findBook(name);if(pos!=-1){System.out.println(booklist.GetPos(pos));}else{System.out.println("没找到这本书!!");}}
}

借阅

package operation;import book.BookList;import java.util.Scanner;public class FindOperation implements Operation{public void work(BookList booklist){Scanner io=new Scanner(System.in);int size=booklist.getUsenum();if(size==0){System.out.println("书架为空!");return;}System.out.println("输入要查找的书名: ");String name=io.nextLine();int pos=booklist.findBook(name);if(pos!=-1){System.out.println(booklist.GetPos(pos));}else{System.out.println("没找到这本书!!");}}
}

归还

package operation;import book.BookList;import java.util.Scanner;public class ReturnOperation implements Operation{public void work(BookList booklist){System.out.println("输入要归还的书籍");String name=new Scanner(System.in).nextLine();int pos=booklist.findBook(name);if(pos!=-1){booklist.GetPos(pos).setBorrow(false);System.out.println("归还成功");}else{System.out.println("书库无"+name+"这本书的存储记录");}}
}

退出

package operation;import book.BookList;public class ExitOperation implements Operation{public void work(BookList booklist){System.out.println("退出系统");System.exit(0);}
}

3.用户管理包

用户抽象类

package user;import book.BookList;
import operation.Operation;import java.util.Scanner;public abstract class User {//抽象类protected String name;protected Scanner choice;protected Operation[] operation;public User(String name){this.name=name;choice=new Scanner(System.in);}public void SelectWork(int op, BookList booklist){this.operation[op].work(booklist);}public abstract int menu();
}

超级用户

package user;import operation.*;public class AdminUser extends User{public AdminUser(String name) {super(name);this.operation=new Operation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation()};}public int menu(){System.out.println("Hello Admin "+this.name+": ");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("=================");return choice.nextInt();}
}

普通用户

package user;import operation.*;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name){super(name);this.operation=new Operation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation(),new DisplayOperation()};}public int menu(){System.out.println("Hello User "+this.name+": ");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("================");return choice.nextInt();}
}

4.主函数,程序入口

//程序入口import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;public class main {public static User login(){System.out.println("输入用户姓名");Scanner io=new Scanner(System.in);String name=io.nextLine();System.out.println("输入用户权限 1:管理员 0:普通用户");int choice=io.nextInt();if(choice==0||choice==1) {if (choice == 1) {return new AdminUser(name);}else{return new NormalUser(name);}}else{System.out.println("用户权限错误,退出程序");return null;}}public static void main(String[] args) {BookList bookList=new BookList();User user=login();//向上转型while(user!=null) {int choice = user.menu();//动态绑定user.SelectWork(choice, bookList);}}
}

5.代码位置

Github

Gitee

JavaSE_面向对象练习_图书管理系统相关推荐

  1. java web 图书管理系统_图书管理系统,源代码 Java初级小项目

    今天再给大家分享一个小项目:MiNi图书管理系统.用的是Java语言开发的,代码不多,大概260行左右吧,系统是实现图书的新增图书.删除图书.借阅图书.归还图书.查看图书等简单的功能(后附源代码)! ...

  2. C++程序设计_图书管理系统的控制台实现

    求打赏求收藏求转发! 提供PDF资源 https://download.csdn.net/download/weixin_43781565/12429074 (审核后可供下载) Peace and l ...

  3. python图书管理系统增删改查_图书管理系统---增删改查

    此代码只考虑正确情况,未判断错误情况 package dboperate; import java.util.Scanner; import model.BookDB; import dboperat ...

  4. python 图书馆管理程序下载_图书管理系统 免费开源代码 开发,分享 - CodeForge.cn...

    图书管理系统0.00 B01-08-04|10:06 test0.00 B01-08-04|10:06 _vti_cnf0.00 B01-08-04|10:06 news0.00 B01-08-04| ...

  5. python图书管理实训报告总结_图书管理系统心得-总结报告模板

    图书管理系统心得 为期两个星期的 c# 图书管理系统实习终于结束了,总算松了一口气,在这 短短的两周时间内承受了很大的压力现在终于能够得到"释放"了, 感觉到很轻 松. 回顾这两周 ...

  6. python面向对象书籍_python面向对象法实现图书管理系统

    本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下 需求: 图书管理系统 1.查询图书 2.增加图书 3.借阅图书 4.归还图书 5.退出系统 书:书名,作者,状态, ...

  7. Java+Jsp+MySql实现图书管理系统_图书管理系统代码

    文章目录 01 系统介绍 02 下载源码 03 工程结构 04 访问系统 05 技术支持 06 功能展示 管理员 普通用户 01 系统介绍 系统名称:图书管理系统(manage_books) 开发工具 ...

  8. java出版社系统_图书管理系统java版

    本文的目的就是通过图书管理系统掌握数据库编程技术,能正确连接数据库,能对数据库中信息进行查询.插入.删除.修改. 内容:在数据库中创建一张书目信息表,包括书名.作者.出版社.出版日期.书号.价格字段. ...

  9. web图书销售管理系统_图书管理系统的主要功能有哪些?

    我们都已经了解到图书管理系统使用带来的好处,那么图书管理系统到底能给图书管理实现哪些功能. 1.基础资料 商品信息齐全,易学易用 商品信息,供货商,客户,员工,仓库等基本参数的设置. 支持一品多码管理 ...

最新文章

  1. 编译安装PHP 时遇到问题解决方法.
  2. 第十六章 推荐系统-机器学习老师板书-斯坦福吴恩达教授
  3. strcpy和memcpy的区别 | strcpy和strncpy的区别
  4. libjingle源码解析(4)-【PseudoTcp】建立UDP之上的TCP(2):对交互数据流的处理
  5. 全志 强制隐藏导航栏状态栏 Patch
  6. python挖长尾词 源码,如何用代码挖局长尾关键词
  7. android 定时器5秒执行一次,如何在android中每30秒执行一次查询?
  8. react --- 按需加载组件
  9. excel 复制数据 sql server 粘贴_win32 实现 excel 快速复制粘贴
  10. 计算1!+2!+...+n!
  11. 《C和C++游戏趣味编程》 第8章 十步万度
  12. 使用gdb调试运行时的程序小技巧 -转
  13. windows 安装 pip工具
  14. 如何做好Web接口测试
  15. 动视暴雪消费产品集团首次亮相2018年中国授权展
  16. 《语义网基础教程(原书第3版)》—— 导读
  17. 创业青年,想赚钱就下乡去吧
  18. 小型机和服务器有何区别
  19. C语言单分支if语句形式,2 单分支if语句
  20. c语言英文分词,英文分词的算法和原理

热门文章

  1. opencv-python 视频抽帧成一张张图片
  2. 软件测试概念-PIE模型
  3. “Ballerina”可能成为集成的编程语言
  4. 也许你我都在等待~~~~~~~~~~~~~~~~
  5. 智慧水务信息化系统的意义
  6. opengl: 太阳地球和月亮
  7. 海尔消费金融“增收不增利”:利润不及两年前,曾多次被点名批评
  8. fme使用workspacerunner批量处理数据
  9. typora导出word指定样式_Word长文档排版以写论文为例
  10. TypeScript技术知识整理