一, 涉及的知识点
1.类和对象;(类是对象的实例化引用)
2.接口;
3.封装和继承;
4.顺序链表存储数据;
二,分析图书管理系统
图书管理系统就是对图书的增删查改,那么由谁来控制呢?我们一般的系统都是分为管理员和普通用户,因此我们是不是可以分析出该系统就是用户通过一系列的操作来控制图书。 那么该系统是不是只需要实现用户,操作活动,图书三个结构来实现呢?
三,定义图书,操作,用户类
1.图书类book
1. 我们先在idea中创建一个文件夹命名为图书管理系统,打开文件夹,点击src 新建一个Package ,并命名为book(TU)
2. 点击book包,新建一个javaclass文件,命名为book(TU);在点击book包新建一个javaclass文件,命名为BookList(TU1)
3.点击book Java文件,图书有书名name,作者acthor,价格price,类型type,是否借阅tatues5个属性;因此定义这些属性,然后构造方法,get,set,其属性,然后添加一个 tostring方法;源代码如下
第一个class类
public class Tu { // 名字 状态 借出日期 次数 public String name; //图书名称 public int state; //图书状态 0已借出1可借 public String date; //借出日期 public double number; // 库存 /* 图书信息展示 */ public void dayin(int index) { System.out.println(index + "\t\t\t\t"+"《" + name + "》"+"\t\t\t\t" + state + "\t\t\t\t" + date + "\t\t\t\t" + number); } public void setBook(String mingzi, int zhuangtai, String riqi, double kucun) { this.name = mingzi; zhuangtai=1; this.state = zhuangtai; this.date = riqi; this.number = kucun; } public void name() { } } 二.数组 第二个class类 public class Tu1 { Tu[] books=new Tu[10]; }
三.图书链表BookList类;
1.在book包下的BookList类下定义一个单链表,首先我们知道单链表的底层是数组,所以我们定义一个数组Book[ ] book和数组的使用长度int usedsize;然后构造方法,get ,set其属性。
2.开始首先在单链表中先存储四本图书,中国的四大名著,因为我们已经使用了数组的4个长度,所以此时的this.usedsize=4 ;
3.3.操作类
1.点击src,创建一个新的包Operation.然后在这个包下新建7个类,分别是Addbook(添加图书),shanchu()(删除图书),kan()(显示所有图书),jiechu()(借书),guihuan ()(归还图书),FoundBook(查找图书),ExitBook(退出系统),最后添加一个接口IBook用于调用功能。
第三个class类
import java.util.Scanner; public class Tu2 extends Throwable { Tu1 bookSet = new Tu1(); public void initial() { Tu java = new Tu(); java.setBook("java基础", 1, "2022/02/03", 2); Tu renyue = new Tu(); renyue.setBook("软件技术", 1, "2022/07/03", 1); Tu jichu = new Tu(); jichu.setBook("程序语言基础", 1, "2022/09/03", 1); bookSet.books[0] = java; bookSet.books[1] = renyue; bookSet.books[2] = jichu; } public void startMenu() { boolean flag = true ; do { 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("请选择:"); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt() ; switch (choice){ case 1: System.out.println("新增图书"); zeng(); break; case 2: System.out.println("查看图书"); kan(); break; case 3: System.out.println("删除图书"); shanchu(); break; case 4: System.out.println("借出图书"); jiechu(); break; case 5: System.out.println("归还图书"); guihuan(); break; case 6: System.exit(0); default: System.out.println("输入不符合要求请重新选择"); } }while (flag) ; } private void kan() { System.out.println("编号 \t\t\t 名称 \t\t\t\t 状态 \t\t\t 借出日期 \t\t\t 库存"); for (int i = 0; i < this.bookSet.books.length; i++) { if (this.bookSet.books[i] != null) { this.bookSet.books[i].dayin(i + 1); ///System.out.println("\t"+"《"+bookSet+"》"+"\t"); } } } private void zeng() { Scanner scanner = new Scanner(System.in); System.out.println("请输入图书的名称:"); String name = scanner.next(); System.out.println("请输入库存:"); int number = scanner.nextInt(); Tu newBook = new Tu(); newBook.setBook(name, newBook.state, newBook.date, newBook.number); for (int i = 0; i < bookSet.books.length; i++) { if (bookSet.books[i] == null) { bookSet.books[i] = newBook; //把新建的对象放在数组中的第一个空位 bookSet.books[i].number = number; //库存 System.out.println("添加成功"); break; //后续的空位置直接跳过 }else { } } } private void guihuan () { System.out.println("请输入要归还书的名称"); Scanner scanner = new Scanner(System.in); String huan = scanner.next(); System.out.println("请输入归还日期"); String riqi = scanner.next(); for (int i = 0; i < bookSet.books.length; i++) { if (bookSet.books[i] == null) { System.out.println("书名不存在归还失败"); break; } if (bookSet.books[i].name.equals(huan)) { // 在书的状态为一借出的状态下可以归还 if (bookSet.books[i].state == 0) { bookSet.books[i].state = 1; bookSet.books[i].date = riqi; } bookSet.books[i].number = bookSet.books[i].number + 1; System.out.println("归还成功"); break; } } } private void jiechu () { System.out.println("请输入要借书的名称"); Scanner scanner = new Scanner(System.in); String jie = scanner.next(); System.out.println("请输入借书的日期"); String riqi = scanner.next(); for (int i = 0; i < bookSet.books.length; i++) { if (bookSet.books[i] == null) { System.out.println("书名不存在"); break; } if (bookSet.books[i] != null && bookSet.books[i].name.equals(jie)) { if (bookSet.books[i].number == 0 && bookSet.books[i].state != 1) { bookSet.books[i].state = 0;//借出后把书的状态改为0(不可借) System.out.println("库存不足,借出失败"); } if (bookSet.books[i].state == 1) { //在书的状态为1(可借)可以借出 System.out.println("借出成功"); bookSet.books[i].date = riqi; //日期改为现在借书的日期 } if (bookSet.books[i].number != 0) { bookSet.books[i].number = bookSet.books[i].number - 1; } if (bookSet.books[i].number == 0) { bookSet.books[i].state = 0; break; } break; } } } private void shanchu () { System.out.println("请输入删除图书的编号:"); Scanner scanner = new Scanner(System.in); int bianhao = scanner.nextInt(); boolean flag = true; for (int i = 0; i < bookSet.books.length; i++) { if (bookSet.books[i] != null && (i + 1) == bianhao) { if (bookSet.books[i].state != 0) { int j = i; while (bookSet.books[j + 1] != null) { //后面元素向前移动 bookSet.books[j] = bookSet.books[j + 1]; j++; } bookSet.books[j] = null; flag = true; break; //后面元素没必要执行 } else { System.out.println("图书为借出状态不能删除"); flag = true; } } else { flag = false; } } if (flag) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } } }
4.main函数运行测试程序
第四个class类
public class text { public static void main(String[] args) { Tu2 bookManage = new Tu2(); bookManage.initial(); bookManage.startMenu(); } }
注意:前面我创建了4个class类,把对应的代码放入对应class类里面即可执行,代码已完善。