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)


相关推荐

  • Java 变量命名规则[通俗易懂]

    Java 变量命名规则[通俗易懂]变量命名必须满足一系列的条件,不能随意命名示例1:命名规则变量命名只能使用:字母数字$_ 变量第一个字符只能使用:字母$_ 变量第一个字符不能使用:数字 注:_是下划线,不是-减号或者——破折号inta=5;inta_12=5;int$a43=5;inta434=5;//第一个是数字,是不行的int34a=5;示例…

    2022年10月30日
  • @ResponseBody注解的作用

    @ResponseBody注解的作用 1、  @ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据或者是XML。  数据,需要注意的呢,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,它的效果等同于通过response对象输出指定格式的数据。    这里…

  • 二进制补码-反码-原码「建议收藏」

    二进制补码-反码-原码「建议收藏」最近学习java基础语法的时候,对其基本数据结构中的二进制位数与十进制大小间的转换产生了疑惑,想起学习IP地址的时候也貌似产生了相同的困惑,所以干脆总结一下,权当学习及备忘了。在计算机内,定点数有

  • 定时任务时间设置[通俗易懂]

    每天凌晨2点002**?和每天隔一小时0**/1**?例1:每隔5秒执行一次:*/5****?例2:每隔5分执行一次:0*/5***?在26分、29分、33分执行一次:026,29,33***?例3:每天半夜12点30分执行一次:0300**?(注意日期域为0不是24)每天凌晨1点执行一次:001**?…

  • Echarts 关系图谱示例「建议收藏」

    Echarts 关系图谱示例「建议收藏」<!DOCTYPEhtml><html><head><metaname=”viewport”content=”width=device-width”/><title>ECharts关系图谱</title><scriptsrc=”jquery-1.10.2.min.js”></script><scriptsrc=”echarts.min.js”>.

  • jquery验证二代身份证

    jquery验证二代身份证$(‘#idcardno’).blur(function(){varidcard=$(this).val();varreg=/^\d{17}\d|x$/;varis_ok=reg.test(idcard);vararrExp=[7,9,10,5,8,4,2,1,6,3,7,9…

发表回复

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

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