大家好,又见面了,我是你们的朋友全栈君。
根据需求,建立了一个BookMgr类,该类为实现小型图书馆的各个需求。为了和用户有一个良好的交互,根据需求且满足要求中的隐藏条件,先命名了交互的菜单函数printMenu1(),代码如下:
public void printMenu1(){
System.out.println(“欢迎使用图书馆管理系统“);
System.out.println(“————————————————“);
System.out.println(“1.新增图书“);
System.out.println(“2.查看图书“);
System.out.println(“3.删除图书“);
System.out.println(“4.借出图书“);
System.out.println(“5.归还图书“);
System.out.println(“6.退 出“);
System.out.println(“————————————————“);
System.out.println(“请选择:“);
}
运行结果如下图:
对于图书的存储,因为是小型图书管理系统,需要查找元素和遍历元素,对于ArrayList,利用ArrayList集合类进行小型数据库搭建,在BookMgr类中,为数据库创建一个ArrayList对象,来进行图书的存储;而对于每本图书信息的存储,建立了一个Book类,该类有关于图书的名称(name)、图书借出状态(state)、图书借出日期(date)和图书借出次数(count),以及相关的构造方法:
public class Book {
private String name;
private int state;
private String date;
private int count;
public Book(String name,int state, String date, int count)
{
this.name = name;
this.state = state;
this.date = date;
this.count = count;
}
public String getName() {
return name;
}
public int getState() {
return state;
}
public String getDate() {
return date;
}
public int getCount() {
return count;
}
//获取各个字段的值
public void setName(String name) {
this.name = name;
}
public void setState(int state) {
this.state = state;
}
public void setDate(String date) {
this.date = date;
}
public void setCount(int count) {
this.count = count;
}
}
接下来进行数据库的构建,创建一个ArrayList集合类的对象,并加以Book泛型:
代码如下:
ArrayList<Book> bookList = new ArrayList<Book>();
list为BookMgr的一个属性,在实现需求之前,则需初始话图书数据库,进行Initial()函数的编写:
代码如下:
public void initial(){
//初始化三本书
Book book1 = new Book(“java程序设计“,0,“2017-12-13”,1);
Book book2 = new Book(“红楼梦“,1,“”,15);
Book book3 = new Book(“C语言程序设计“,1,“”,23);
bookList.add(book1);
bookList.add(book2);
bookList.add(book3);
}
数据库构建之后,对于各个需求的功能函数将在下面进行编写:
-
新增图书(addBook())
在图书数据库进行图书的新增的时候,要与图书数据库连接;首先要获取用户进行增加图书的名字,然后根据名字进行图书的增加,与此同时,如果图书库里含有该书(忽略版本),则不需要进行添加,反馈该书存在的相关信息,并结束此次图书的添加;若没有该图书则进行添加该图书,则添加该图书,并对该图书的信息做初始化。在此,应在获取图书名称之后,对图书库进行遍历,来判断图书库是否有该书籍。
代码如下:
public void add(){
boolean flag = false;
System.out.println(“—->新增图书\n”);
System.out.println(“请输入图书名称:“);
Scanner input = new Scanner(System.in);
String books = input.next();
for(int i=0;i<bookList.size();i++){
if(bookList.get(i).getName().equalsIgnoreCase(books)){
System.out.println(“该图书已存在,不需要在增加!“);
flag = true;
break;
}
}
if(!flag){
Book book = new Book(books,1,“”,23);
bookList.add(book);
System.out.println(“新增<<“+books+“>>,成功!“);
}
System.out.println(“*************************************************”);
returnMain();
}
执行结果如下:
-
查看图书(search ())
在进行图书的查看时,首先连接图书数据库,然后对图书信息进行列表显示,根据Book类state属性,进行图书借出状态显示,date属性进行图书借出日期的显示.
代码如下:
public void search(){
System.out.println(“—->查看图书\n”);
System.out.println(“序号\t状态\t名称\t\t\t借出日期“);
for(int i=0;i<bookList.size();i++){
if(bookList.get(i).getState()==0){
System.out.println((i+1)+“\t已借出\t”+“<<“+bookList.get(i).getName()+“>>\t\t”
+bookList.get(i).getDate());
}else if(bookList.get(i).getState()==1){
System.out.println((i+1)+“\t可借\t”+“<<“+bookList.get(i).getName()+“>>\t\t”);
}
}
System.out.println(“*************************************************”);
returnMain();
}
执行结果如下:
-
删除图书(deleteBook())
进行图书库删除图书的操作,首先连接图书数据库;获取用户所需要删除图书的名称;然后利用ArrayList类size()函数,对图书库库存量进行计算;若为0,则无法删除;若找到,并且该书并没有被借出,则用ArrayList类remove()函数进行图书的删除,若借出,则删除失败;否则,所删除书不存在。
代码如下:
public void delete(){
boolean flag = false;
System.out.println(“—->删除图书\n”);
System.out.println(“请输入图书名称:“);
Scanner input = new Scanner(System.in);
String name = input.next();
for(int i=0;i<bookList.size();i++){
if(bookList.get(i).getName()!=null
&& bookList.get(i).getName().equalsIgnoreCase(name)
&& bookList.get(i).getState()==1){
bookList.remove(i);
System.out.println(“图书删除成功,欢迎下次使用!“);
flag = true;
break;
}else if(bookList.get(i).getName()!=null
&& bookList.get(i).getName().equalsIgnoreCase(name)
&& bookList.get(i).getState()==0){
System.out.println(“此图书被借出,不能进行删除!“);
flag = true;
break;
}
}
if(!flag){
System.out.println(“没有录入此图书,不能进行删除!“);
}
System.out.println(“*************************************************”);
returnMain();
}
执行结果如下:
-
借出图书(lend ()))
进行借出图书,首先连接图书数据库,获取用户所要借出的图书名称(wantname);进行图书数据库的遍历,若找到用户所借的图书,若该图书并没有被借出,则反馈图书借出成功并初始化该书借出状态与借出日期和借出次数,否则反馈已借出;否则,反馈用户所借图书不存在。
代码如下:
public void lend(){
boolean flag = false;
System.out.println(“—->借出图书\n”);
Scanner input = new Scanner(System.in);
System.out.println(“请输入图书名称:“);
String wantname = input.next();
for(int i=0;i<bookList.size();i++){
if(bookList.get(i).getName()==null){
System.out.println(“没有找到该图书!“);
break;
}else if( bookList.get(i).getName().equals(wantname)
&& bookList.get(i).getState()==1){
bookList.get(i).setState(0);
System.out.println(“请输入借书日期(年–月–日):“);
String date=input.next();
bookList.get(i).setDate(date);
System.out.println(“图书借出成功,欢迎下次使用!“);
break;
}else if( bookList.get(i).getName().equalsIgnoreCase(wantname)
&& bookList.get(i).getState()==0){
System.out.println(“《“+wantname+“》已被借出,抱歉!“);
break;
}
}
System.out.println(“*************************************************”);
returnMain();
}
执行结果如下:
-
归还图书及计算借书时间和租金(returnBook(),long charge())
归还图书与借出图书的思路一致,归还后还要计算租金,归还图书时候还要计算租书时间,这里利用了将字符串转化为数组的思想,然后将数组相计算。
代码如下:
public void returnBook(){
boolean flag = false;
Scanner input = new Scanner(System.in);
long loan=0;
System.out.println(“—->归还图书\n”);
System.out.println(“请输入图书名称:“);
String wantname = input.next();
for(int i=0;i<bookList.size();i++){
if(bookList.get(i).getName()==null){
System.out.println(“没有找到该图书!“);
break;
}else if(bookList.get(i).getName().equalsIgnoreCase(wantname)
&&bookList.get(i).getState()==0){
bookList.get(i).setState(1);
System.out.println(“请输入日期(年–月–日):“);
String returndate = input.next();
//计算租金
loan = charge(bookList.get(i).getDate(),returndate);
System.out.println(“借出日期为:“+bookList.get(i).getDate());
System.out.println(“归还日期为:“+returndate);
System.out.println(“¥应付租金(元)¥:“+loan/2);
System.out.println(“请按照上面金额付款:“);
double s = input.nextDouble();
if(s==(loan/2)){
System.out.println(“\n归还<<“+wantname+“>>成功!“);
}
bookList.get(i).setCount(bookList.get(i).getCount()+1);
break;
}else if(bookList.get(i).getName().equalsIgnoreCase(wantname)&&bookList.get(i).getState()==1){
System.out.println(“《“+wantname+“未被借出,无法进行归还操作!“);
break;
}
}
System.out.println(“*************************************************”);
returnMain();
}
public long charge(String dstr1,String dstr2){
long charge=0;
SimpleDateFormat sd = new SimpleDateFormat(“yyyy-mm-dd”);
try{
Date d1 = sd.parse(dstr1);
Date d2 = sd.parse(dstr2);
charge = (d2.getTime()-d1.getTime())/(24*60*60*1000);
}catch(ParseException e){
e.printStackTrace();
}
return charge;
}
最后建立一个test类:
public class Test {
public static void main(String[] args) {
BookMgr test = new BookMgr();
test.initial();
test.bookMgr();
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156890.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...