java小型图书馆管理系统

java小型图书馆管理系统根据需求,建立了一个BookMgr类,该类为实现小型图书馆的各个需求。为了和用户有一个良好的交互,根据需求且满足要求中的隐藏条件,先命名了交互的菜单函数printMenu1(),代码如下:publicvoidprintMenu1(){          System.out.println(“欢迎使用图书馆管理系统”);          Syst

大家好,又见面了,我是你们的朋友全栈君。



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

        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156890.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • redis配置文件密码_windows查看redis版本

    redis配置文件密码_windows查看redis版本此设置并未成功,待完善1、启动redis服务,双击redis-server.exe或者在redis文件夹下运行redis-server.exeredis.windows.conf2、在redis文件夹下打开命令窗口,刚开始连接服务,因为初始没有密码,所以无需输入,即可连接服务,窗口中输入redis-cli.exe-h127.0.0.1-p6379//无需添加…

  • oracle可以更改表名,sql – 更改Oracle表名

    oracle可以更改表名,sql – 更改Oracle表名我正在尝试在oracle中更改表名.我首先运行此脚本来声明表CREATETABLECUSTOMER(C_IDNUMBER(6,0),C_LASTVARCHAR2(25),C_FIRSTvarchar2(25),C_MIchar(1),C_DOBDATE,C_ADDRESSvarchar2(100),C_CITYvarchar2(35),C_STATEchar(2),C_ZIP…

  • iptables防火墙打造安全网络

    iptables防火墙打造安全网络

  • 一台服务器可以干什么

    一台服务器可以干什么

  • TinyXML用法小结[通俗易懂]

    TinyXML用法小结[通俗易懂]TinyXML用法小结1.     介绍Tinyxml的官方网址:http://www.grinninglizard.com官方介绍文档:http://www.grinninglizard.com/tinyxmldocs/tutorial0.html在TinyXML中,根据XML的各种元素来定义了一些类:TiXmlBase:整个TinyXML模型的基类。TiXmlAttr…

  • 十大Intellij IDEA快捷键

    十大Intellij IDEA快捷键IntellijIDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发时的使用频率,简单分类列一下我最喜欢的十大快捷-神-键吧。1智能提示Intellij最强大的功能当然就是Intelligence智能!基本的代码提示用Ctrl+Space,还有…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号