JAVA图书管理系统详细代码
JAVA图书管理系统详细代码
- 图书管理系统
- 主函数
- 图书相关操作(operation包)
- 操作接口
- 增加图书
- 借阅图书
- 删除书籍
- 显示书籍
- 退出系统
- 查找图书
- 归还书籍
- 图书及“书架”(book包)
- 图书
- “书架”
- 使用人群(user包)
- user父类
- 普通使用人员
- 管理员
图书管理系统
代码主要分为四个大部分,主函数,图书相关函数,操作,以及使用者。分为三个包:book、operation、user和一个单独的主函数。
主函数
import book.BookList;
import user.AdiminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;public class Main {public static User login() {System.out.println("请输入姓名:");Scanner scan=new Scanner(System.in);String name=scan.nextLine();System.out.println("请输入你的身份(1->管理员 0->用户):");int id=scan.nextInt();if(id==1){return new AdiminUser(name);}else{return new NormalUser(name);}}public static void main(String[] args) {BookList bookList =new BookList();while(true) {User user=login();int choice = user.menu();user.doOperation(choice, bookList);//对图书进行相关的操作}}
}
图书相关操作(operation包)
操作接口
对于每一个操作都有相近的一部分,刚好可以用接口,在User(使用者)中利用接口类型的数组来进行相关的操作。在下面的User中会具体说。
package operation;import book.Book;
import book.BookList;public interface IOpreation {public void work(BookList booklist);
}
增加图书
增加图书只需要在数组的最后添加即可,于是要利用booklist.getUsedsize();得到图书数组的使用长度,决定要增加的图书应该所在的位置。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class AddOperation implements IOpreation{@Overridepublic void work(BookList booklist) {System.out.println("新增图书");int size=booklist.getUsedsize();Scanner scan=new Scanner(System.in);System.out.println("请输入图书名称:");String name=scan.nextLine();System.out.println("请输入图书作者:");String anuthor=scan.nextLine();System.out.println("请输入图书价格:");int price=scan.nextInt();System.out.println("请输入图书种类:");String type=scan.nextLine();Book book=new Book(name,anuthor,price,type);booklist.setBooklist(size,book);System.out.println("新增书籍成功");booklist.setUsedsize(size+1);}
}
借阅图书
对于借阅图书只需要将图书信息中的布尔型变量isBorrowed变量变为true即可,首先还是要遍历booklist找到该书。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOpreation {public void work(BookList booklist){System.out.println("借阅图书");Scanner scan=new Scanner(System.in);System.out.println("请输入要借阅的书籍名称:");String name=scan.nextLine();int size=booklist.getUsedsize();for (int i = 0; i <size ; i++) {Book book=booklist.getBook(i);if(book.getName().equals(name)){book.setBorrowed(true);System.out.println("借阅成功");System.out.println("该书籍的信息为:");System.out.println(book);return;}}System.out.println("该书籍不存在");}
}
删除书籍
类似于借阅书籍,首先要先找到你要删除的书籍,因此设置一个中间变量,index来判断是否存在该书籍,对于书籍同样也是要遍历booklist,对于删除操作只需要用后一个覆盖前一个的内容即利用for循环前移即可。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DeleteOperation implements IOpreation{@Overridepublic void work(BookList booklist) {System.out.println("删除图书");Scanner scan=new Scanner(System.in);System.out.println("请输入要删除的图书名称:");String name= scan.nextLine();int size=booklist.getUsedsize();int index=-1;for (int i = 0; i <size ; i++) {Book book=booklist.getBook(i);if(book.getName().equals(name)){index=i;break;}}if(index==-1){System.out.println("不存在你想要删除的书籍");}//删除操作for (int i = index; i <size-1 ; i++) {Book book=booklist.getBook(i+1);booklist.setBooklist(i,book);}System.out.println("删除成功");booklist.setUsedsize(size-1);}
}
显示书籍
同样利用booklist.getUsedsize();得到数组的使用长度,然后利用for循环将每本书依次打印出来即可。
package operation;import book.Book;
import book.BookList;import java.util.Arrays;public class DisplayOperation implements IOpreation{@Overridepublic void work(BookList booklist) {System.out.println("显示图书");int size=booklist.getUsedsize();for (int i = 0; i < size; i++) {Book book=booklist.getBook(i);System.out.println(book);}}
}
退出系统
package operation;import book.Book;
import book.BookList;public class ExitOperation implements IOpreation{@Overridepublic void work(BookList booklist) {System.out.println("退出系统");System.exit(0);}
}
查找图书
主要是比较booklist中图书的名字与输入的名字之间是否相同,要先将数组中的某一本图书赋给一个Book类的变量book然后才能进行比较(Book book=booklist.getBook(i);)book.getName().equals(name)。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOpreation{@Overridepublic void work(BookList booklist) {System.out.println("查找图书");Scanner scan=new Scanner(System.in);System.out.println("请输入要查找的书籍名称:");String name=scan.nextLine();int size=booklist.getUsedsize();for (int i = 0; i <size ; i++) {Book book=booklist.getBook(i);if(book.getName().equals(name)){System.out.println("查找成功,该书籍的信息为:");System.out.println(book);return;}}System.out.println("不存在你要查找的书籍");}
}
归还书籍
和借阅图书进行对比可只,借阅图书是将isBorrowed变量由false变为true,那么归还图书就是将isBorrowed变量由true变为false.
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOpreation{@Overridepublic void work(BookList booklist) {System.out.println("归还图书");Scanner scan=new Scanner(System.in);System.out.println("请输入要归还的书籍名称:");String name=scan.nextLine();int size=booklist.getUsedsize();for (int i = 0; i <size ; i++) {Book book=booklist.getBook(i);if(book.getName().equals(name)){book.setBorrowed(false);System.out.println("归还成功");System.out.println("该书籍的信息为:");System.out.println(book);break;}}}
}
图书及“书架”(book包)
图书
需要说明的是在重写的toString函数中(toString函数在Object类中,它被认为是所有类的父类)(isBorrowed == true ? " 已借出 “:” 未借出 ") 将true和false转换为文字。
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;}public boolean isBorrowed() {return isBorrowed;}public void setBorrowed(boolean borrowed) {isBorrowed = borrowed;}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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\t' +", author='" + author + '\t' +", price=" + price +", type='" + type + '\t' +(isBorrowed == true ? " 已借出 ":" 未借出 ") +'}';}
}
“书架”
书架就可以看成以Book为基本数据类型的一个数组,要设立数组使用长度,便于后续操作。
package book;public class BookList {private Book[] booklist=new Book[10];private int usedsize;public BookList(){this.booklist[0]=new Book("三国演义","罗贯中",28,"小说");this.booklist[1]=new Book("水浒传","施耐庵",36,"小说");this.booklist[2]=new Book("红楼梦","曹雪芹",56,"小说");this.booklist[3]=new Book("西游记","吴承恩",35,"小说");this.usedsize=4;}public int getUsedsize() {return usedsize;}public void setUsedsize(int usedsize) {this.usedsize = usedsize;}public void setBooklist(int pos,Book book){booklist[pos]=book;}public Book getBook(int pos){return booklist[pos];}
}
使用人群(user包)
user父类
这里有一个protected IOpreation[] iOpreations;即接口类型的数组,主要是在它的子类中,在构造函数中需要根据它们各自的功能实例化各个操作。
package user;import book.BookList;
import operation.IOpreation;public abstract class User {protected String name;protected IOpreation[] iOpreations;public User(String name){this.name=name;}public abstract int menu();public void doOperation(int choice, BookList bookList){this.iOpreations[choice].work(bookList);}}
普通使用人员
上面说的 IOpreation[] iOpreations,在这里就实例化了
this.iOpreations=new IOpreation[]{new FindOperation(),new BorrowOperation(),new ReturnOperation(),new ExitOperation()
对于选择的操作序号我们也要返回,从而在主函数中调用User类中的doOperation操作,要注意在上面对操作进行实例化时要与下面菜单的顺序一致。
package user;import operation.*;import java.util.Scanner;public class NormalUser extends User {public NormalUser(String name) {super(name);this.iOpreations=new IOpreation[]{new FindOperation(),new BorrowOperation(),new ReturnOperation(),new ExitOperation()};}public int menu(){System.out.println("********普通人员菜单*********");System.out.println("欢迎"+name+"进入图书借阅系统");System.out.println("0 查找书籍");System.out.println("1 借阅书籍");System.out.println("2 归还书籍");System.out.println("3 退出系统");Scanner scan=new Scanner(System.in);int choice=scan.nextInt();return choice;}
}
管理员
与上面的普通人员除了操作不同之外,其他都是同样的道理。
package user;import operation.*;import java.util.Scanner;public class AdiminUser extends User{public AdiminUser(String name) {super(name);this.iOpreations=new IOpreation[]{new DisplayOperation(),new DeleteOperation(),new AddOperation(),new FindOperation(),new ExitOperation()};}public int menu() {System.out.println("********管理员菜单**********");System.out.println("欢迎"+name+"进入管理员菜单");System.out.println("0 显示书籍");System.out.println("1 删除书籍");System.out.println("2 增加书籍");System.out.println("3 查找书籍");System.out.println("4 退出系统");System.out.println("***************************");Scanner scan = new Scanner(System.in);int choice = scan.nextInt();return choice;}
}
JAVA图书管理系统详细代码相关推荐
- 视频教程-手把手实现Java图书管理系统(附源码)-Java
手把手实现Java图书管理系统(附源码) 南京大学软件工程硕士,曾就职于擎天科技.中软国际.华为等上市公司,擅长Java开发.Web前端.Python爬虫.大数据等领域技术. 全栈工程师,从事软件开发 ...
- Java图书管理系统练习程序(四)
2019独角兽企业重金招聘Python工程师标准>>> Java图书管理系统练习程序(四) 本部分主要介绍List的基本操作与Java中泛型的使用. 一.Java中泛型的使用 泛型, ...
- [附源码]计算机毕业设计JAVA图书管理系统
[附源码]计算机毕业设计JAVA图书管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intell ...
- java图书管理系统技术难度_Java图书管理系统练习程序(一)
Java图书管理系统练习程序 第一部分 该部分主要实现命令行方式的界面与无数据库访问的练习,通过本练习.主要掌握Java的基础知识与面向对象程序设计思想.面向接口编程技术的知识与运用. 一.练习程序功 ...
- Python分分钟实现图书管理系统(含代码)
Python分分钟实现图书管理系统(含代码) 废话不多说,直接上代码. import sys# 打印书库中的所有书的函数 def book_detail(books):for book_name, b ...
- Java时间类型转换详细代码示例
Java时间类型转换详细代码示例 一.时间类型转换代码示例 二.时间标准简介 1.UTC(世界标准时间) 2.GMT(格林尼治平时) 3.CST(北京时间) 三.SimpleDateFormat 参数 ...
- java图书管理系统源码
java图书管理系统源码 系统主要功能 读者:登录注册,借阅还书,查询书籍,查看当前借阅信息以及历史借阅信息,查看.查询读者借阅榜以及借阅书籍借阅榜,问题反馈以及查询反馈结果等功能. 管理员:对图书. ...
- 图书管理系统jsp代码_【程序源代码】使用Java开发的图书管理系统
关键字:java 管理系统 正文 | 内容 01 - [概述] 使用Java开发的图书管理系统,读者可以注册登录,登录时会判断账号类型再分别跳到各自对应的页面,读者可以查找,借阅,还书,查看历史借阅 ...
- javaweb 图书管理系统完整代码_基于Java web的图书管理系统
源码编号:B-E00029点击查看(分类规则) 项目类型:Java EE项目(非开源) 项目名称:基于Java web的图书管理系统(library_system) 当前版本:V2.0.2版本 难度等 ...
- java简单图书管理系统的代码,java编写的图书管理系统源代码
<java编写的图书管理系统源代码>由会员分享,可在线阅读,更多相关<java编写的图书管理系统源代码(6页珍藏版)>请在人人文库网上搜索. 1.用户登陆数据库代码:impor ...
最新文章
- JFreeChart(四)之线型图
- mysql数据库操作宠物表_mysql数据库之表的操作
- Git和Github实现代码同步
- BZOJ.4650.[NOI2016]优秀的拆分(后缀数组 思路)
- SEO是什么?SEO的作用?SEO的推广特点?
- java环境变量代表的含义_java环境变量的含义
- python初学者学用anaconda学_致Python初学者:Anaconda入门使用指南
- 数字图像处理(2)——数字图像获取
- H5 学习之旅-H5表格(7)
- iOS:基于Photos框架的图片选择器以及创建自定义相册
- python裁剪图片大小
- Faker最新仓库地址更新 4/6
- Ubuntu 16.04下EasyOpenJTAG+OpenOCD的安装和使用【转】
- #455 科技乱炖:看完《流浪地球2》,我们为行星发动机设计了网络架构
- VMware vSphere理论
- 基于OpenStack的云计算平台搭建
- MySQL where in 用法详解
- Linux -- 项目服务部署学习
- STM32 F105 USB CDC host
- 一刷131-dp-1143最长公共子序列(m)(剑指 Offer II 095. 最长公共子序列)