java小型图书馆管理系统



根据需求,建立了一个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>();

listBookMgr的一个属性,在实现需求之前,则需初始话图书数据库,进行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);

    }

 

数据库构建之后,对于各个需求的功能函数将在下面进行编写:

  1. 新增图书(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();

        }

    执行结果如下:

  2. 查看图书(search ()

        在进行图书的查看时,首先连接图书数据库,然后对图书信息进行列表显示,根据Bookstate属性,进行图书借出状态显示,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();

        }

    执行结果如下:

  3. 删除图书(deleteBook()

        进行图书库删除图书的操作,首先连接图书数据库;获取用户所需要删除图书的名称;然后利用ArrayListsize()函数,对图书库库存量进行计算;若为0,则无法删除;若找到,并且该书并没有被借出,则用ArrayListremove()函数进行图书的删除,若借出,则删除失败;否则,所删除书不存在。

    代码如下:

    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();

          

        }

    执行结果如下:

     

  4. 借出图书(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();

        }

    执行结果如下:

  5. 归还图书及计算借书时间和租金(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();

        }

    }

发布了14 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xibei19921101/article/details/79007321