SpringBoot控制台版图书借阅程序
// 实验存档。。。
效果图:
完整程序:https://pan.baidu.com/s/1-d1J90dkEtM0WKkABu0K0Q
提取码:hcnm
CREATE DATABASE jee_ex10; USE jee_ex10; CREATE TABLE book ( id BIGINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, isbn VARCHAR(50), author VARCHAR(50), press VARCHAR(50), num INT, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8; CREATE TABLE student ( id BIGINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, sex VARCHAR(50), id_card VARCHAR(50), birth VARCHAR(50), PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8; CREATE TABLE lending_record ( id BIGINT NOT NULL AUTO_INCREMENT, book_id BIGINT, stu_id BIGINT, num INT, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8; -- SET NAMES gbk; INSERT INTO book(name, isbn, author, press, num) VALUES ("book1", "ASDXZC1DSA23123", "尼采", "长江出版社", 20), ("book2", "ASDXZC1DSA23123", "尼采", "长江出版社", 30); INSERT INTO student(name, sex, id_card, birth) VALUES ("张三", "男", "350824199210233922", "92年10月23日"), ("李四", "女", "350824199312233922", "92年12月23日");
DAO层代码由MyBatis Generator生成,仅补充若干自定义代码。主要的代码只有下面这个:
package com.book; import com.book.dao.BookMapper; import com.book.dao.StudentMapper; import com.book.dao.lendingRecordMapper; import com.book.model.Book; import com.book.model.Student; import com.book.model.lendingRecord; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Scanner; @SpringBootApplication @MapperScan("com.book.dao") public class MyApplication implements CommandLineRunner { @Autowired private BookMapper bookMapper; @Autowired private StudentMapper studentMapper; @Autowired private lendingRecordMapper lendingRecordMapper; public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } @Override public void run(String... strings) throws Exception { serve(); } private void serve() { Scanner scan = new Scanner(System.in); int command; while (true) { 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、退出程序"); command = scan.nextInt(); if (command == 1) { System.out.println("请问你下一步要干嘛?"); System.out.println("1、增书"); System.out.println("2、改书"); System.out.println("3、删书"); System.out.println("4、查书"); System.out.println("5、浏览书"); command = scan.nextInt(); if (command == 1) { System.out.println("1、请你依次输入书的书名、作者、出版社、ISBN号、数量"); System.out.println("注意一行一个:"); scan.nextLine(); String name = scan.nextLine(); System.out.println("书名" + name + "已录入。"); String author = scan.nextLine(); String press = scan.nextLine(); String isbn = scan.nextLine(); int num = scan.nextInt(); Book book = new Book(name, author, press, isbn, num); bookMapper.insert(book); System.out.println(book + "已录入!!!"); } else if (command == 2) { System.out.println("想改书?请填入书的id以及欲改字段"); System.out.print("书的id:"); long id = scan.nextLong(); System.out.print("书名:"); String name = scan.next(); System.out.print("作者:"); String author = scan.next(); System.out.print("出版社:"); String press = scan.next(); System.out.print("isbn:"); String isbn = scan.next(); System.out.print("数量:"); int num = scan.nextInt(); Book book = new Book(name, author, press, isbn, num); book.setId(id); System.out.println(book + "修改成功!!!"); // bookMapper.updateByPrimaryKeySelective(); } else if (command == 3) { System.out.println("你想删书?请直接输入书的id:"); long id = scan.nextLong(); System.out.println("恭喜你,删除成功!!!"); } else if (command == 4) { System.out.println("你想查书?请直接输入书的id:"); long id = scan.nextLong(); Book book = bookMapper.selectByPrimaryKey(id); if (book == null) { System.out.println("不好意思没有这本书"); } else { System.out.println("找到这本书了,信息如下:"); System.out.println(book); } } else if (command == 5) { List<Book> list = bookMapper.selectAll(); for (Book x : list) { System.out.println(x); } } } else if (command == 2) { System.out.println("请问你下一步要干嘛?"); System.out.println("1、增用户"); System.out.println("2、改用户"); System.out.println("3、删用户"); System.out.println("4、查用户"); System.out.println("5、浏览用户"); command = scan.nextInt(); if (command == 1) { System.out.println("1、请你依次输入用户的身份证号码、姓名、出生年月、性别"); System.out.println("注意一行一个:"); scan.nextLine(); String idCard = scan.nextLine(); System.out.println("idCard" + idCard + "已录入。"); String name = scan.nextLine(); String birth = scan.nextLine(); String sex = scan.nextLine(); Student student = new Student(name, sex, idCard, birth); studentMapper.insert(student); System.out.println(student + "已录入!!!"); } else if (command == 2) { System.out.println("想改用户?请填入用户的id以及欲改字段"); System.out.print("用户的id:"); long id = scan.nextLong(); System.out.print("身份证号码:"); String idCard = scan.next(); System.out.print("姓名:"); String name = scan.next(); System.out.print("性别:"); String sex = scan.next(); System.out.print("出生年月:"); String birth = scan.next(); Student student = new Student(name, sex, idCard, birth); student.setId(id); System.out.println(student + "修改成功!!!"); // bookMapper.updateByPrimaryKeySelective(); } else if (command == 3) { System.out.println("你想删用户?请直接输入用户的id:"); long id = scan.nextLong(); System.out.println("恭喜你,删除成功!!!"); } else if (command == 4) { System.out.println("你想查用户?请直接输入用户的id:"); long id = scan.nextLong(); Student student = studentMapper.selectByPrimaryKey(id); if (student == null) { System.out.println("不好意思没有这个用户"); } else { System.out.println("找到这个用户了,信息如下:"); System.out.println(student); } } else if (command == 5) { List<Student> list = studentMapper.selectAll(); for (Student x : list) { System.out.println(x); } } } else if (command == 3) { System.out.print("读者id:"); Long uid = scan.nextLong(); System.out.print("书的id:"); Long bookId = scan.nextLong(); System.out.print("借书本数:"); int num = scan.nextInt(); borrowBooks(uid, bookId, num); } else if (command == 4) { System.out.print("读者id:"); Long uid = scan.nextLong(); System.out.print("书的id:"); Long bookId = scan.nextLong(); returnBooks(uid, bookId); } else if (command == 5) { break; } } } @Transactional private void borrowBooks(Long uid, Long bookId, int num) { Student student = studentMapper.selectByPrimaryKey(uid); if (student == null) { System.out.println("读者身份有错!!!请检查一遍再重新输入"); return; } Book book = bookMapper.selectByPrimaryKey(bookId); if (book == null || book.getNum() < num) { System.out.println("书籍不存在或者数量不够!!!"); return; } book.setNum(book.getNum() - num); bookMapper.updateByPrimaryKey(book); System.out.println("书籍数量已更新"); lendingRecord record = lendingRecordMapper.selectByUidAndBookId(uid, bookId); if (record != null) { // 如果借过同类的书,那就更新记录 record.setNum(record.getNum() + num); lendingRecordMapper.updateByPrimaryKey(record); } else { // 如果没有,创建新记录 record = new lendingRecord(uid, bookId, num); lendingRecordMapper.insert(record); } System.out.println("恭喜你!借书成功!"); } @Transactional private void returnBooks(Long uid, Long bookId) { // 可能出现Expected one result (or null) to be returned by selectOne(), but found: 2 // 需要保证数据干净 lendingRecord record = lendingRecordMapper.selectByUidAndBookId(uid, bookId); if (record == null) { System.out.println("不好意思,查不到该条借书记录~"); } else { // 增加库存 Book book = bookMapper.selectByPrimaryKey(bookId); book.setNum(book.getNum() + record.getNum()); bookMapper.updateByPrimaryKey(book); // 删除记录 lendingRecordMapper.deleteByPrimaryKey(record.getId()); System.out.println("恭喜你,还书成功~~~"); System.out.println("^o^"); } } }