0


图书管理系统

前言

这次文章将带大家实现一个图书管理系统,界面如下:

在这里插入图片描述

在这里插入图片描述

找到对象

我们从上面就可以知道,我们需要创建两个对象,一个是管理员对象,一个是普通用户对象,由于这两个对象都是用户这一范畴,所以我们可以为他们创建一个父类,那我们可以将这三个类放在同一个包上,如下图所示:

在这里插入图片描述
然后我们进一步思考我们还需要什么类,由于这是一个图书管理系统,所以我们可以创建书这个类用来创建多本的书,我们还可以创建一个书架用来存放书籍,这两个类我们把他们放在同一个包上:

在这里插入图片描述

我们有很多个功能需要实现,例如增加图书,删除图书,查询图书等等…我们可以再创建一个包用来专门存放这些功能:

在这里插入图片描述

最后我们需要创建一个Main类用来组装上面的代码,使其成为一个管理系统。

代码实现

book包

Book类

这里的书包括书名,作者,书的类型,价格以及书是否被借出的状态,这样我们可以创建对应的成员变量,为了有封装的体现,我们可以使用private修饰这些创元变量,然后通过Getter and Setter 来实现成员变量的访问就可以了.

由于我们会访问这本书的所有信息,我们就需要打印,这时候我们就要重写toString 方法,尽管IDEA编译器会自动帮我们实现,但是对于书是否被借出的状态打印,我们需要打印字符串(“未借阅” 和 “已借阅”)这两种状态,但是这个成员变量是boolean类型的,所以我们如果不去修改toString 方法的话,我们就会得到false和true这两种打印形式,那么我们就要稍微修改一下代码,这时候我们可以使用三目表达式来进行修改

如果直接使用编译器自动生成 toString 代码:

publicBook(String name,String author,String type,double price,boolean is_borrowed){this.name = name;this.author = author;this.type = type;this.price = price;this.is_borrowed = is_borrowed;}

结合上述的要点,我们可以得到下面的代码:

publicclassBook{privateString name;privateString author;privateString type;privatedouble price;privateboolean is_borrowed;@OverridepublicStringtoString(){return"Book{"+"name='"+ name +'\''+", author='"+ author +'\''+", type='"+ type +'\''+", price="+ price +(is_borrowed ==false?" 未借阅":" 已借阅")+'}';}publicBook(String name,String author,String type,double price){this.name = name;this.author = author;this.type = type;this.price = price;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetAuthor(){return author;}publicvoidsetAuthor(String author){this.author = author;}publicStringgetType(){return type;}publicvoidsetType(String type){this.type = type;}publicdoublegetPrice(){return price;}publicvoidsetPrice(double price){this.price = price;}publicbooleanisIs_borrowed(){return is_borrowed;}publicvoidsetIs_borrowed(boolean is_borrowed){this.is_borrowed = is_borrowed;}}

BookList 类 (书架)

我们可以使用组合来将书放在代码里,我们还可以先将三本书放在书架上,这时候我们可以通过构造方法来初始化书架,我们还需要知道书架上目前有多少本书,容量是多少,成员变量要相应的写上去,并且通过getter和setter方法来来实现成员变量的访问…

publicclassBookList{privateBook[] books;privateint curSize;privateint count;publicBookList(){
        books =newBook[10];
        books[0]=newBook("三国演义","罗贯中","名著",30.12);
        books[1]=newBook("西游记","吴承恩","名著",30.14);
        books[2]=newBook("红楼梦","曹雪芹","名著",50.42);

        curSize =3;
        count =10;}publicintgetCurSize(){return curSize;}publicvoidsetCurSize(int curSize){this.curSize = curSize;}publicintgetCount(){return count;}publicvoidsetCount(int count){this.count = count;}publicBookgetBooks(int i){return books[i];}publicvoidsetBooks(int pos,Book newBook){
        books[pos]= newBook;}}

user包

我们先来创建父类 User,需要姓名这一个成员变量,由于父类本身是要被继承的,所以我们可以将其实现为抽象类,不同的身份有不同的菜单列表,既然都是菜单我们不妨在父类写一个抽象方法,提醒子类要记得写菜单,还有用户会输入不同的数字来实现不同的功能,这里我们可以创建一个功能实现的方法,这样子我们就可以通过父类的引用来实现不同的子类所对应的功能…

publicabstractclassUser{publicString name;protectedIoperate[] opertions;publicUser(String name){this.name = name;}publicabstractintmenu();publicvoidwork(int choice,BookList bookList){
        opertions[choice].operate(bookList);}}

管理者

publicclassManagerextendsUser{publicManager(String name){super(name);
        opertions =newIoperate[]{newExit(),newFind(),newAdd(),newDelete(),newShow()};}@Overridepublicintmenu(){System.out.println("*******管理员菜单*******");System.out.println("       1.查询图书");System.out.println("       2.增加图书");System.out.println("       3.删除图书");System.out.println("       4.显示所有图书");System.out.println("       0.退出系统");System.out.println("************************");System.out.println("请输入你的选择:");Scanner scan =newScanner(System.in);int choice = scan.nextInt();return choice;}}

普通用户

publicclassDomesticConsumerextendsUser{publicDomesticConsumer(String name){super(name);
        opertions =newIoperate[]{newExit(),newFind(),newBorrow(),newReturn()};}@Overridepublicintmenu(){System.out.println("*******普通用户菜单*******");System.out.println("       1.查询图书");System.out.println("       2.借阅图书");System.out.println("       3.归还图书");System.out.println("       0.退出系统");System.out.println("************************");System.out.println("请输入你的选择:");Scanner scan =newScanner(System.in);int choice = scan.nextInt();return choice;}}

Ioperation包

接口

我们可以通过一个接口来实现功能的有机联系,这样我们就可以通过这个接口类型来实现不同的方法,我们知道这些方法几乎都会操作书架,所以我们将书架作为参数进行传递就可以了。

publicinterfaceIoperate{voidoperate(BookList bookList);}

Add

我们直接采用尾插,我们需要判断一下书架是否还能继续放书,需要将目前的图书数目和书架容量进行比较就可以了,接下来就是创建新书,将新书放到书架即可,这时候我们要注意书架放书的代码是否正确,我们使用IDEA编译器只能实现Book[]类型的getter和setter,但是书的类型是Book,所以我们需要自己写一个放书的代码:

publicvoidsetBooks(int pos,Book newBook){
        books[pos]= newBook;}

为什么不直接写books[curSize] = newBook呢?

因为我们后面删除图书的代码里也是需要对书架上的书进行移动,会用到setter方法,所以为了代码的通用性高,我们就多加了一个pos参数

publicclassAddimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){int count = bookList.getCount();int curSize = bookList.getCurSize();if(count == curSize){System.out.println("书架已满,无法再放入别的图书.......");return;}System.out.println("请输入你要增加的书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();System.out.println("请输入作者名字");String author = scan.nextLine();System.out.println("请输入图书类型:");String type = scan.nextLine();System.out.println("请输入图书价格:");double price = scan.nextDouble();Book newBook =newBook(name,author,type,price);
        bookList.setBooks(curSize,newBook);
        bookList.setCurSize(curSize +1);}}

在进行删除图书,查询图书,这里我采用的是通过书名进行遍历访问的方式。
这时候我们就要小心,因为我们是对书架进行操控的,所以我们要先拿到书这个对象,那我们就要看怎么拿出对应的书,由于编译器只能实现Book[]类型的getter,所以我们还是要自己写一个拿书的代码。
由于书名是String类型,所以可以使用equals方法经行字符串的比对。所以我们拿到书后还要访问书的书名再进行比对即可。

publicBookgetBooks(int i){return books[i];}
Book book = bookList.getBooks(i);if(book.getName().equals(name)){//......}

Delete

删除书也很容易,我们需要把待删除的书后面的书进行前移

publicclassDeleteimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){int curSize = bookList.getCurSize();if(curSize ==0){System.out.println("书架已空,无法继续删除......");}System.out.println("请输入你要删除图书的书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();for(int i =0; i < curSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){System.out.println("删除成功......");for(int j = i; j < curSize -1; j++){
                    bookList.setBooks(j,bookList.getBooks(j+1));}
                bookList.setCurSize(curSize -1);return;}}System.out.println("未查询到该书.....");}}

Borrow

publicclassBorrowimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("请输入你要借阅图书书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();int curSize = bookList.getCurSize();for(int i =0; i < curSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){if(book.isIs_borrowed()==false){System.out.println("该书已被你成功借阅......");
                    book.setIs_borrowed(true);}else{System.out.println("该书已被借阅,无法被再次借阅.....");}return;}}System.out.println("未查询到此书......");}}

Find

publicclassFindimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("输入你要查询的书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();int count = bookList.getCurSize();for(int i =0; i < count; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){System.out.println(book);return;}}System.out.println("未查询到此书......");}}

Return

publicclassReturnimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("请输入你要归还书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();int count = bookList.getCurSize();for(int i =0; i < count; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){if(book.isIs_borrowed()==true){System.out.println("归还成功......");
                    book.setIs_borrowed(false);}else{System.out.println("该图书已被归还到书架上,无需重复归还......");}return;}}System.out.println("未查询到该图书.....");}}

Show

publicclassShowimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){int count = bookList.getCurSize();for(int i =0; i < count; i++){System.out.println(bookList.getBooks(i));}}}

Exit

退出程序的代码就是System.exit(数字),数字零表示正常退出的意思。

publicclassExitimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("退出系统......");System.exit(0);}}

登录

我们再Main类写一个login方法

publicstaticUserlogin(){Scanner scan =newScanner(System.in);System.out.println("请输入你的姓名:");String name = scan.nextLine();System.out.println("1.管理员   2.普通用户");System.out.println("请输入你的身份:");int identity = scan.nextInt();if(identity ==1){returnnewManager(name);}else{returnnewDomesticConsumer(name);}}

主逻辑实现

我们先登录,然后创建书架,接着打印菜单,用户输入指令,计算机进行对应的操作:

publicstaticvoidmain(String[] args){//创建书架BookList bookList =newBookList();//loginUser user =login();while(true){//功能菜单选择int choice = user.menu();//功能实现
            user.work(choice,bookList);}}

最终代码

Main类

importbook.BookList;importuser.DomesticConsumer;importuser.Manager;importuser.User;importjava.util.Scanner;publicclassMain{publicstaticUserlogin(){Scanner scan =newScanner(System.in);System.out.println("请输入你的姓名:");String name = scan.nextLine();System.out.println("1.管理员   2.普通用户");System.out.println("请输入你的身份:");int identity = scan.nextInt();if(identity ==1){returnnewManager(name);}else{returnnewDomesticConsumer(name);}}publicstaticvoidmain(String[] args){//创建书架BookList bookList =newBookList();//loginUser user =login();while(true){//功能菜单选择int choice = user.menu();//功能实现
            user.work(choice,bookList);}}}

user包

User

packageuser;importIoperation.Ioperate;importbook.BookList;publicabstractclassUser{publicString name;protectedIoperate[] opertions;publicUser(String name){this.name = name;}publicabstractintmenu();publicvoidwork(int choice,BookList bookList){
        opertions[choice].operate(bookList);}}

Manager

packageuser;importIoperation.*;importjava.util.Scanner;publicclassManagerextendsUser{publicManager(String name){super(name);
        opertions =newIoperate[]{newExit(),newFind(),newAdd(),newDelete(),newShow()};}@Overridepublicintmenu(){System.out.println("*******管理员菜单*******");System.out.println("       1.查询图书");System.out.println("       2.增加图书");System.out.println("       3.删除图书");System.out.println("       4.显示所有图书");System.out.println("       0.退出系统");System.out.println("************************");System.out.println("请输入你的选择:");Scanner scan =newScanner(System.in);int choice = scan.nextInt();return choice;}}

DomesticConsumer

packageuser;importIoperation.*;importjava.util.Scanner;publicclassDomesticConsumerextendsUser{publicDomesticConsumer(String name){super(name);
        opertions =newIoperate[]{newExit(),newFind(),newBorrow(),newReturn()};}@Overridepublicintmenu(){System.out.println("*******普通用户菜单*******");System.out.println("       1.查询图书");System.out.println("       2.借阅图书");System.out.println("       3.归还图书");System.out.println("       0.退出系统");System.out.println("************************");System.out.println("请输入你的选择:");Scanner scan =newScanner(System.in);int choice = scan.nextInt();return choice;}}

book 包

Book

packagebook;publicclassBook{privateString name;privateString author;privateString type;privatedouble price;privateboolean is_borrowed;@OverridepublicStringtoString(){return"Book{"+"name='"+ name +'\''+", author='"+ author +'\''+", type='"+ type +'\''+", price="+ price +(is_borrowed ==false?" 未借阅":" 已借阅")+'}';}publicBook(String name,String author,String type,double price){this.name = name;this.author = author;this.type = type;this.price = price;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetAuthor(){return author;}publicvoidsetAuthor(String author){this.author = author;}publicStringgetType(){return type;}publicvoidsetType(String type){this.type = type;}publicdoublegetPrice(){return price;}publicvoidsetPrice(double price){this.price = price;}publicbooleanisIs_borrowed(){return is_borrowed;}publicvoidsetIs_borrowed(boolean is_borrowed){this.is_borrowed = is_borrowed;}}

BookList

packagebook;publicclassBookList{privateBook[] books;privateint curSize;privateint count;publicBookList(){
        books =newBook[10];
        books[0]=newBook("三国演义","罗贯中","名著",30.12);
        books[1]=newBook("西游记","吴承恩","名著",30.14);
        books[2]=newBook("红楼梦","曹雪芹","名著",50.42);

        curSize =3;
        count =10;}publicintgetCurSize(){return curSize;}publicvoidsetCurSize(int curSize){this.curSize = curSize;}publicintgetCount(){return count;}publicvoidsetCount(int count){this.count = count;}publicBookgetBooks(int i){return books[i];}publicvoidsetBooks(int pos,Book newBook){
        books[pos]= newBook;}}

Ioperation包

Ioperate

packageIoperation;importbook.BookList;publicinterfaceIoperate{voidoperate(BookList bookList);}

Add

packageIoperation;importbook.Book;importbook.BookList;importjava.util.Scanner;publicclassAddimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){int count = bookList.getCount();int curSize = bookList.getCurSize();if(count == curSize){System.out.println("书架已满,无法再放入别的图书.......");return;}System.out.println("请输入你要增加的书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();System.out.println("请输入作者名字");String author = scan.nextLine();System.out.println("请输入图书类型:");String type = scan.nextLine();System.out.println("请输入图书价格:");double price = scan.nextDouble();Book newBook =newBook(name,author,type,price);
        bookList.setBooks(curSize,newBook);
        bookList.setCurSize(curSize +1);}}

Borrow

packageIoperation;importbook.Book;importbook.BookList;importjava.util.Scanner;publicclassBorrowimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("请输入你要借阅图书书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();int curSize = bookList.getCurSize();for(int i =0; i < curSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){if(book.isIs_borrowed()==false){System.out.println("该书已被你成功借阅......");
                    book.setIs_borrowed(true);}else{System.out.println("该书已被借阅,无法被再次借阅.....");}return;}}System.out.println("未查询到此书......");}}

Delete

packageIoperation;importbook.Book;importbook.BookList;importjava.util.Scanner;publicclassDeleteimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){int curSize = bookList.getCurSize();if(curSize ==0){System.out.println("书架已空,无法继续删除......");}System.out.println("请输入你要删除图书的书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();for(int i =0; i < curSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){System.out.println("删除成功......");for(int j = i; j < curSize -1; j++){
                    bookList.setBooks(j,bookList.getBooks(j+1));}
                bookList.setCurSize(curSize -1);return;}}System.out.println("未查询到该书.....");}}

Exit

packageIoperation;importbook.BookList;publicclassExitimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("退出系统......");System.exit(0);}}

Find

packageIoperation;importbook.Book;importbook.BookList;importjava.util.Scanner;publicclassFindimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("输入你要查询的书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();int count = bookList.getCurSize();for(int i =0; i < count; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){System.out.println(book);return;}}System.out.println("未查询到此书......");}}

Return

packageIoperation;importbook.Book;importbook.BookList;importjava.util.Scanner;publicclassReturnimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){System.out.println("请输入你要归还书名:");Scanner scan =newScanner(System.in);String name = scan.nextLine();int count = bookList.getCurSize();for(int i =0; i < count; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){if(book.isIs_borrowed()==true){System.out.println("归还成功......");
                    book.setIs_borrowed(false);}else{System.out.println("该图书已被归还到书架上,无需重复归还......");}return;}}System.out.println("未查询到该图书.....");}}

Show

packageIoperation;importbook.BookList;publicclassShowimplementsIoperate{@Overridepublicvoidoperate(BookList bookList){int count = bookList.getCurSize();for(int i =0; i < count; i++){System.out.println(bookList.getBooks(i));}}}
标签: java

本文转载自: https://blog.csdn.net/liwuqianhzc/article/details/139864703
版权归原作者 熵减玩家 所有, 如有侵权,请联系我们删除。

“图书管理系统”的评论:

还没有评论