java实现图书馆管理系统
作者:lijiangjiajun 发布时间:2023-12-10 15:50:29
标签:java,图书馆,管理系统
本文实例为大家分享了java实现图书馆管理系统的具体代码,供大家参考,具体内容如下
思路:所有包都在book_manage包里
利用面向对象的多态特性去除了很多if-else的判断,不同的子类在父类所对应的方法不同。
1.首先建立一个book包
包里面有2个类,一个是Book,这个类里面包含一本书的全部信息
另外一个类是BookList,这个类是用来管理每一个书,通过这个类来寻找每一本书。
private Book[] books = new Book[100];
Book数组里面存放所有的书。
2.再建立一个包Operation 这个类里面有一个OI接口,通过对接口里面的Work方法重写,来实现管理员身份和普通用户身份的不同操作。
3.最后建立一个User包,里面有三个类,User,Admin,NormalUser
Admin和NormalUser都继承自User.
User里秒你有一个数组
protected IO[] operation;
这个数组里面包含了用户或者管理员所具备的操作。
通过对数组的索引来确定具体需要调用的操作方法。
下面来看看代码吧:
book包
Book类
package book_manager.book;
public class Book {
private String name;
private String id;
private String author;
private int price;
private String type;
private boolean isBorrow;
public Book(String name, String id, String author, int price,
String type, boolean isBorrow) {
this.name = name;
this.id = id;
this.author = author;
this.price = price;
this.type = type;
this.isBorrow = isBorrow;
}
@Override //Object中内置的类,用来格式化打印book的信息
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrow=" + isBorrow +
'}';
}
public String getName(){
return name;
}
public boolean isBorrow(){
return isBorrow;
}
public void setBorrow(boolean bool){
this.isBorrow=bool;
}
public String getId(){
return id;
}
}
BookList类
package book_manager.book;
import java.util.Arrays;
public class BookList {
private Book[] books = new Book[100];
private int size;
public BookList(){
books[0] = new Book(" * ",
"001", "兰陵笑笑生", 100,
"古典名著", false);
books[1] = new Book("水浒传",
"002", "施耐庵", 100,
"古典名著", false);
books[2] = new Book("西游记",
"003", "吴承恩", 100,
"古典名著", false);
size = 3;
}
public int getSize(){
return size;
}
public void setBooks(int index,Book book){
books[index]=book;
}
public void setSize(int size){
this.size=size;
}
public Book getBook(int index){
return books[index];
}
}
Operation包:
ADD类
package book_manager.Operation;
import book_manager.book.*;
import java.util.Scanner;
public class ADD implements IO{
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入书名");
String name =scanner.next();
System.out.println("请输入序号");
String id = scanner.next();
System.out.println("请输入作者");
String author =scanner.next();
System.out.println("请输入价格");
int price = scanner.nextInt();
System.out.println("请输入类型");
String type = scanner.next();
Book book = new Book(name, id,
author, price, type, false);
bookList.setBooks(bookList.getSize(),book);
bookList.setSize(bookList.getSize()+1);
System.out.println("添加成功");
}
}
Borrow类
package book_manager.Operation;
import book_manager.book.Book;
import book_manager.book.BookList;
import java.util.Scanner;
public class Borrow implements IO{
@Override
public void work(BookList bookList) {
int i=0;
int flag=0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入需要借阅的书名");
String name = scan.next();
for(;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
if(bookList.getBook(i).isBorrow()==false){
System.out.println("借阅成功");
flag=1;
bookList.getBook(i).setBorrow(true);
}
}
}
if(flag==0){
System.out.println("不好意思,借阅失败");
}
}
}
Delete类
package book_manager.Operation;
import book_manager.book.BookList;
import java.util.Scanner;
public class Delete implements IO{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入想要删除的编号");
String id = scanner.next();
for(int i=0;i<bookList.getSize();i++){
if(bookList.getBook(i).getId().equals(id)){
bookList.setBooks(i,bookList.getBook(bookList.getSize()));
bookList.setSize(bookList.getSize()-1);
System.out.println("删除成功");
}
else{
System.out.println("删除失败");
}
}
}
}
Exit类
package book_manager.Operation;
import book_manager.book.BookList;
public class Exit implements IO{
@Override
public void work(BookList bookList) {
System.out.println("退出成功");
System.exit(0);
}
}
Find类
package book_manager.Operation;
import book_manager.book.BookList;
import java.util.Scanner;
public class Find implements IO{
@Override
public void work(BookList bookList) {
int i=0;
int count=0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入需要查找的书名");
String name = scan.next();
for(;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
count++;
}
}
if(count==0){
System.out.println("不好意思,没有找到");
}
else{
System.out.println("找到了,共计"+count+"本");
}
}
}
IO接口
package book_manager.Operation;
import book_manager.book.BookList;
public interface IO {
abstract public void work(BookList bookList);
}
PrintAll类
package book_manager.Operation;
import book_manager.book.BookList;
public class PrintAll implements IO{
@Override
public void work(BookList bookList) {
for(int i=0;i<bookList.getSize();i++){
System.out.println(bookList.getBook(i));
}
}
}
Return类
package book_manager.Operation;
import book_manager.book.BookList;
import java.util.Scanner;
public class Return implements IO{
@Override
public void work(BookList bookList) {
int i=0;
int flag=0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入需要归还的ID");
String id = scan.next();
for(;i<bookList.getSize();i++){
if(id.equals(bookList.getBook(i).getId())){
if(bookList.getBook(i).isBorrow()==true){
System.out.println("归还成功");
bookList.getBook(i).setBorrow(false);
flag=1;
}
else{
System.out.println("归还失败");
}
}
}
if(flag==0){
System.out.println("不好意思,没有此书");
}
}
}
user包:
User类
package book_manager.user;
import book_manager.Operation.*;
import book_manager.Operation.IO;
import book_manager.book.BookList;
abstract public class User {
String name;
protected IO[] operation;
public User(String name){
this.name=name;
}
abstract public int menu();//该方法被重写
public void doOperation(int choice, BookList bookList) {
operation[choice].work(bookList);
}
}
Admin类
package book_manager.user;
import book_manager.Operation.*;
import java.util.Scanner;
public class Admin extends User{
public Admin(String name){
super(name);
operation=new IO[]{
new Exit(),
new Find(),
new ADD(),
new Delete(),
new PrintAll(),
};
}
public int menu() {
System.out.println("============");
System.out.println("hello " + name);
System.out.println("1. 查找书籍");
System.out.println("2. 增加书籍");
System.out.println("3. 删除书籍");
System.out.println("4. 打印所有信息");
System.out.println("0. 退出");
System.out.println("============");
System.out.println("请输入您的选择: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
NormalUser
package book_manager.user;
import book_manager.Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name){
super(name);
operation=new IO[]{
new Exit(),
new Find(),
new Borrow(),
new Return(),
new PrintAll()
};
}
public int menu() {
System.out.println("============");
System.out.println("hello " + name);
System.out.println("1. 查找图书");
System.out.println("2. 借阅图书");
System.out.println("3. 归还图书");
System.out.println("4. 查看全部书籍");
System.out.println("0. 退出");
System.out.println("============");
System.out.println("请输入您的选择: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
// close 本质上是在关闭 System.in
// 由于后面还需要用到 System.in, 此处不能盲目关闭.
// scanner.close();
return choice;
}
}
最后还有一个Test类,里面放了main函数
package book_manager;
import book_manager.book.BookList;
import book_manager.user.Admin;
import book_manager.user.NormalUser;
import book_manager.user.User;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
BookList list = new BookList();
User user = login();
//通过不同的choice和身份调用不同的Operation方法
while(true){
int choice = user.menu();
user.doOperation(choice, list);
}
}
public static User login(){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名");
String name = scanner.next();
System.out.println("请输入你的身份");
System.out.println("1.普通用户 2.管理员");
int role= scanner.nextInt();
if(role==1){
return new NormalUser(name);
}
else{
return new Admin(name);
}
}
}
更多学习资料请关注专题《管理系统开发》。
来源:https://blog.csdn.net/lijiangjiajun/article/details/102701279


猜你喜欢
- 首先给大家展示下运行效果图:由于通讯录在手机里是以数据库贮存的 所以我们可以通过一个方法context.getContentResolver
- public static void SortDicWithLinq(){ &nb
- 一、前言问题阐述:在某一场景下,我们的代码在 Service 实现相同,但却在 Controller 层访问时却希望不同的前缀可以访问。如下
- 前言Exchange(交换器)顾名思义,它是用来实现两个线程间的数据交换的,它诞生于 JDK 1.5,它有两个核心方法:exchange(V
- 在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。登录校验可以利用spring mvc的 * Interceptor,实现H
- 定时任务技术趋势简介:定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报
- 学习C#编程最常见的示例程序是在控制台应用程序中输出Hello World!using System;namespace DemoMainA
- 背景:在Android中按照数据保存的方式,可以分为如下几种Content Provider (用的SQLite实现),SQLite,Sha
- Spring简介1.什么是Springspring是分层的JavaSE及JavaEE应用于全栈的轻量级开源框架,以 IoC (Inverse
- JAVA用于开发图形界面应用的 SWING 组件包功能强大,使用方便。接下来我们就使用其写一个简单的图形界面小程序:加法计算器。第一步:首先
- 目录源码实现基本流程ThreadLoalMap数据结构Hash冲突及解决ThreadLocal内存泄露内存引用链路引用类型为什么使用弱引用而
- FloatingActionButton项目在github上的主页:https://github.com/futuresimple/andr
- 本文研究的主要是Java回调函数与观察者模式的实现,具体介绍和实现代码如下。观察者模式(有时又被称为发布(publish )-订阅(Subs
- service有两种类型:本地服务(Local Service):用于应用程序内部远程服务(Remote Sercie):用于android
- 本文实例讲述了Android开发实现webview中img标签加载本地图片的方法。分享给大家供大家参考,具体如下:在网上查了很多教程,感觉很
- Springboot Aspect切面的实现今天我们来说说spring中的切面Aspect,这是Spring的一大优势。面向切面编程往往让我
- 公司app要求做一个扭蛋功能,其实就是一个可拖动层叠卡片列表,原理还是由一个自定义Recyclerview和LayoutManager来实现
- 在C#语言中,DateTime是用来表示时间的类,在C#的DateTime时间类中,提供了好像时间对象加减法操作,可用于某一个时间对象加减
- 上一篇文章我们了解了Java背包问题求解实例代码,接下来我们看看Java中模仿用户登录的相关代码,下面是具体内容。基于用户从控制台输入模拟的
- HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决