Java实现简单的图书管理系统(讲解清晰,代码齐全,能正常
运⾏)
⽬录
实现的样⼦
⾸先让我们来看⼀下系统实现以后⼤致的样⼦
如果说要做⼀个⼤致这样⼦的图书管理系统,那么我们要有⼤致的思路:
⾸先我们要创建三个包,user,operation,book
⼤致思路
1. 要有书对吧,所以创建Book类存放每本书的基本信息
2. 图书馆有很多书对吧,所以创建Books类存放好⼏本书,⾥⾯放了⼀个Book类型的数组和⼀个usedSize表⽰总共书的数⽬
3. 有两种不同的⼈,管理员和⽤户,总共有7个功能,也就是要写7个功能类
4. 然后我们发现,这7个功能类都要定义这么⼀个work⽅法,⽽且都是对BookList进⾏操作的,因此我们可以设置⼀个接⼝
IOperation,让这些功能类实现这个接⼝
5. 然后我们再看User这个包,这⾥⾯有两种⽤户,⼀个是管理员,⼀个是普通⽤户,注意到他们都有各⾃的菜单,同时他们都有姓名等
⼀些公共的属性,所以这⾥我们可以定义⼀个User⽗类,让AdminUser和 NormalUser去继承这个类。
6. 注意到这⾥的菜单不⼀样,可以分别再AdminUser和NormalUser⾥⾯都定义⼀个menu⽅法,但是这样不灵活,所以我们可以在
User类⾥⾯定义⼀个空的menu⽅法,然后让另外两个类去实现,以后还可以⽅便进⾏多态(动态绑定),更加灵活,注意到menu 是空的,所以可以设置成abstract⽅法,同时User类也要改为abstract类。
7. 注意这⾥menu显⽰了以后要输⼊⼀个数字代表你要使⽤的功能,所以需要返回⼀个数字代表你所使⽤的功能,这⾥可以把menu⽅法
定义为返回值为int型的⽅法
8. 现在我们在最外⾯新建⼀个Main类,⾥⾯写main⽅法,在main⽅法之前我们写⼀个login⽅法,⽤来读⼊⽤户的名称以及他的⽤户类
型,如果是管理员,返回⼀个AdminUser对象,如果是普通⽤户,返回⼀个NormalUser对象,这⾥注意把login()⽅法的返回值设置为User对象,然后再main⽅法中User user = login;然后u();显⽰出菜单,这⾥就使⽤了多态,通过返回值让⽗类引⽤引⽤了⼦类的对象,同时⽗类的引⽤调⽤了⼦类重写过的同名⽅法。
9. 最巧妙的⼀步,我们现在的user已经完成了动态绑定,相当于已经知道了他是管理员还是普通⽤户,接下来要做的就是根据choice的
值来调⽤相应的操作类。
现在你只有⼀个user,所以根据choice调⽤不同的操作这个⽅法⾃然也应该在user这个类中。⾸先在User内部定义⼀个成员变量,操作接⼝的数组,⽤于存放不同的操作类
然后在AdminUser和NormalUser按顺序初始化这些操作类,这⾥相当于IOperation接⼝发⽣了向上转型
在User⾥⾯定义doOperation⽅法,根据choice调⽤不同操作类的work⽅法对booklist数组进⾏操作
10.由于选择功能使⽤⼀次以后,不能直接退出,需要再次显⽰菜单,所以我们将选择菜单和调⽤相应⽅法这两个语句写到死循环中
11.接下来就只需要写那⼏个功能类就可以了
12.ExitOperation,it(0);即可
13.AddOperation,很简单,让⽤户输⼊图书相应的信息,然后新建⼀个book类,初始化放到bookList的usedSize位置即可,之后别忘了更新usedSize
14.FindOperationn,fori遍历即可,每⼀次遍历可以先定义⼀个book对象,然后⽐较该对象的名称与输⼊的名称是否⼀样,如果到了,提⽰并打印,然后直接return;这样就不⽤设置flag了,如果⾛出了for循环还没有return,那么就说明没到,提⽰没到即可。
15.DisplayOperation,fori遍历即可
16.BorrowOperation,ReturnOperation,对相应isBorrowed变量进⾏相应操作即可
代码(按照这个⽬录创建包)
代码亲测能正常运⾏,如果不想⾃⼰慢慢新建类的话,可以点击下⾯链接⾃取。不过其实新建类也挺快的,要注意不要把类的名字建错。有什么不会弄的都可以评论问我。
、
⾸先是book包下,有两个类
book类
1package Library.book;
2
3public class Book {
4 private String name;
5 private String author;
6 private int price;
7 private String type;
8 private boolean isBorowed; //默认是flase,默认没有被借,所以可以不⽤初始化
9 public Book(String name, String author, int price, String type) {
10 this.name = name;
11 this.author = author;
12 this.price = price;
13 pe = type;
14 //默认是flase,默认没有被借,所以可以不⽤初始化
15 }
16
17 public String getName() {
18 return name;
19 }
20
21 public void setName(String name) {
22 this.name = name;
23 }
24
25 public String getAuthor() {
26 return author;
27 }
28
nextint()方法29 public void setAuthor(String author) {
30 this.author = author;
31 }
32
33 public int getPrice() {
34 return price;
35 }
36
37 public void setPrice(int price) {
38 this.price = price;
39 }
40
41 public String getType() {
42 return type;
43 }
44
45 public void setType(String type) {
46 pe = type;
47 }
47 }
48
49 public boolean isBorowed() {
50 return isBorowed;
51 }
52
53 public void setBorowed(boolean borowed) {
54 isBorowed = borowed;
55 }
56
57 @Override
58 public String toString() {
59 return "book{" +
60 "name='" + name + '\'' +
61 ", author='" + author + '\'' +
62 ", price=" + price +
63 ", type='" + type + '\'' +
64 ", isBorowed=" + isBorowed +
65 '}';
66 }
67}
bookList类
1package Library.book;
2
3public class BookList {
4 private Book[] books = new Book[10];
5 private int usedSize = 0;
6 public BookList(){
7 books[0] = new Book("游戏⼈⽣","榎宫祐",12,"轻⼩说");
8 books[1] = new Book("见⾯5秒开始战⽃","肠才藏",20,"漫画");
9 books[2] = new Book("碧蓝之海","井上竖⼆",25,"漫画");
10 this.usedSize = 3;
11 }
12
13 public Book getBook(int pos) { //取pos位置的那本书
14 return this.books[pos];
15 }
16
17 public void setBook(int pos, Book book) { //将pos位置的书置为book
18 this.books[pos] = book;
19 }
20
21 public int getUsedSize() {
22 return usedSize;
23 }
24
25 public void setUsedSize(int usedSize) {
26 this.usedSize = usedSize;
27 }
28}
然后是operation包下,有7个类和1个接⼝
AddOperation类
1package Library.operation;
2
3import Library.book.Book;
4import Library.book.BookList;
5
6import java.util.Scanner;
7
8/**
9 * Created with IntelliJ IDEA.
10 * User: 13498
11 * Date: 2021/11/18
12 * Time: 22:43
13 * Description:新增图书
14 */
15public class AddOperation implements IOperation {
16 public void work(BookList bookList){
17 Scanner scanner = new Scanner(System.in);
18 System.out.println("新增图书");
19 //只需要放到当前数组的usedSize位置
20 System.out.println("请输⼊图书的名字:");
21 String name = ();
22 System.out.println("请输⼊图书的作者:");
23 String author = ();
24 System.out.println("请输⼊图书的价格:");
25 int price = Int();
26 System.out.println("请输⼊图书的类型:");
27 String type = ();
28 Book book = new Book(name,author,price,type);
29 int curSize = UsedSize();
30 bookList.setBook(curSize,book);
31 bookList.setUsedSize(curSize+1);
32 System.out.println("图书添加成功!");
33 }
34
35}
BorrowOperation类
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论