Java图书管理基本功能代码怎么写
导读:本文共4215.5字符,通常情况下阅读需要14分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 首先还是来看看运行的效果我们来分析一下:Java中是通过对象之间的交互来解决事情的,所以我们来看看有哪些对象首先显而易见的两个对象:用户和书,所以创建两个包book和user通过上图可以看到:不同用户之间有相同的操作,也有不同的操作,所以不妨将所有的操作都放在一个包中,需要什么操作直接调用即可,我将这个包命名为operate1.book包首先包中肯定需要有一个B... ...
目录
(为您整理了一些要点),点击可以直达。首先还是来看看运行的效果
我们来分析一下:
Java中是通过对象之间的交互来解决事情的,所以我们来看看有哪些对象
首先显而易见的两个对象:用户和书,所以创建两个包book和user
通过上图可以看到:不同用户之间有相同的操作,也有不同的操作,所以不妨将所有的操作都放在一个包中,需要什么操作直接调用即可,我将这个包命名为operate
1.book包
首先包中肯定需要有一个Book类,此类中记录数的各种信息,包括书名、作者、书的类型、价格和借阅状态,所有包中的所有类中的成员变量我都使用private修饰,只提供对外的方法,后面就不再重复,代码如下(只展示部分代码):
packagebook;publicclassBook{privateStringname;privateStringauthor;privateStringtype;privateintprice;privatebooleanborrow;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(Stringauthor){this.author=author;}}
既然有书,那么就需要书架来存放书,所以在book包中再定义一个类为BookShelf用来存放书以及记录书的数量,存放书可以用Book类数组实现
publicclassBookShelf{privateBook[]books=newBook[1000];privateintcount;//记录书的数量}
由于数组不能直接访问,所以在类中增加一个获取数组下标的方法,而访问数组的方法一般都是对书进行操作,所以setBook方法也进行修改
packagebook;publicclassBookShelf{privateBook[]books=newBook[1000];privateintcount;//记录书的数量publicvoidsetBooks(intpos,Bookbook){books[pos]=book;}publicintgetCount(){returncount;}publicvoidsetCount(intcount){this.count=count;}publicBookShelf(){books[0]=newBook("呐喊","鲁迅","小说集",30);//默认初始有一本书,写不写随你this.count=1;}//获取下标对应的书publicBookpos(inti){returnbooks[i];}}
book包初步的代码就到这,继续下一个包
2.user包
包中肯定会有普通用户(NormalUser)和管理员(AdminUser)两个类,但重点是如何实现图中的不同用户有不同的操作
那我们先将登陆方法写出来,然后分析:
publicstaticvoidlogin(){System.out.println("输入姓名:");Scannerscanner=newScanner(System.in);Stringname=scanner.nextLine();System.out.println("输入你身份:1.管理员2.普通用户");inti=scanner.nextInt();if(i==1){//管理员}else{//普通用户}}
方法根据不同的数字来判断是哪种用户,所以返回值应该是返回一个类,但这里有两个类,为解决这个问题,我们可以让NormalUser和AdminUser都继承同一个父类,方法只要返回父类即可
父类代码如下:
publicabstractclassUser{privateStringname;publicUser(Stringname){this.name=name;}publicabstractvoidmenu();//菜单抽象方法,子类实现}
子类代码:
publicclassAdminUserextendsUser{publicAdminUser(Stringname){super(name);}@Overridepublicvoidmenu(){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("选择操作");}}publicclassNormalUserextendsUser{publicNormalUser(Stringname){super(name);}@Overridepublicvoidmenu(){System.out.println("欢迎使用");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出系统");System.out.println("选择操作");}}
不同用户对应着不同的操作,但有相同的操作数,所以两个类需要有一个数组来存放各自的方法来防止出错,而且这个数组是要在用户选择之前就准备好,所以数组应该是在构造方法内,修改后的类如下:
publicabstractclassUser{privateStringname;publicIOperate[]ioperate;publicvoidchooseOperate(intchoice,BookShelfbookShelf){ioperate[choice].work(bookShelf);}publicUser(Stringname){this.name=name;}publicabstractintmenu();}publicclassAdminUserextendsUser{publicAdminUser(Stringname){super(name);this.ioperate=newIOperate[]{newExit(),newFindBook(),newAddBook(),newDelBook(),newDisplayBook(),};}@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("选择操作");Scannerscanner=newScanner(System.in);intchoice=scanner.nextInt();returnchoice;}}publicclassNormalUserextendsUser{publicNormalUser(Stringname){super(name);this.ioperate=newIOperate[]{newExit(),newFindBook(),newBorrowBook(),newReturnBook(),};}@Overridepublicintmenu(){System.out.println("欢迎使用");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出系统");System.out.println("选择操作");Scannerscanner=newScanner(System.in);intchoice=scanner.nextInt();returnchoice;}}
3.operate包
图书的增删改查等操作其实都是在对Book数组来进行操作的,所以这些方法的参数都是BookShelf类,那么我们可以定义一个接口,接口内定义此方法,然后其它类实现此接口即可
接口代码:
packageoperate;importbook.BookShelf;publicinterfaceIOperate{publicvoidwork(BookShelfbookShelf);}
至于对书的操作,这里以增加书籍为例
我们需要知道书的信息,然后要有一个Book类来接收,最后放到数组中
按照这个逻辑,之前的Book类就需要修改:在Book类中添加一个构造方法以便接收书的信息,注意方法在数组中的位置要和你自己写的菜单中的位置对应
publicBook(Stringname,Stringauthor,Stringtype,intprice){this.name=name;this.author=author;this.type=type;this.price=price;}
增加书的方法代码:
publicclassAddBookimplementsIOperate{@Overridepublicvoidwork(BookShelfbookShelf){System.out.println("请输入图书的名字:");Scannerscanner=newScanner(System.in);Stringname=scanner.nextLine();System.out.println("请输入图书的作者:");Stringauthor=scanner.nextLine();System.out.println("请输入图书的类型:");Stringtype=scanner.nextLine();System.out.println("请输入图书的价格:");intprice=scanner.nextInt();Bookbook=newBook(name,author,type,price);intcount=bookShelf.getCount();bookShelf.setBooks(count,book);bookShelf.setCount(count+1);System.out.println("新增成功");}}
注:
1.由于引用变量默认是输出修改的地址,所以要打印书的内容的话需要在类Book中重写toString方法
2.退出方法在退出前需遍历数组将其指向的对象都改为null方便回收,虽然程序结束后系统也会回收,但你要知道大型工程里面有些程序一旦跑起来后想要停下来不是那么容易的
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Java图书管理基本功能代码怎么写的详细内容,希望对您有所帮助,信息来源于网络。