SpringBoot控制台版图书借阅程序
// 实验存档。。。
效果图:
完整程序:https://pan.baidu.com/s/1-d1J90dkEtM0WKkABu0K0Q
提取码:hcnm
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^");
}
}
}
SpringBoot控制台版图书借阅程序的更多相关文章
- [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)
package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- 转贴:修改springboot控制台输出的图案
Post from:https://blog.csdn.net/WXN069/article/details/90667668 修改springboot控制台输出的图案1.在src\main\reso ...
- 清理忽略springboot控制台启动的banner和启动日志
清理忽略springboot控制台启动的banner和启动日志 1.springboot的banner spring: main: banner-mode: off 2.mybatis-plus的ba ...
- springboot 控制台程序读取配置文件(原创)
首先新建一个springboot项目,此处省略. 1.新建一个application.properties person.name=kevin person.age=6 person.sex=male ...
- 控制台手动编译Qt5程序
转自:http://www.cnblogs.com/csulennon/p/4479236.html 在上一篇随笔中已经搭建好了Qt5的的开发环境,并且通过Qt Creator自动构建了一个视窗程序. ...
- .NET Core创建一个控制台(Console)程序
.NET Core版本:1.0.0-rc2 Visual Studio版本:Microsoft Visual Studio Community 2015 Update 2 开发及运行平台:Window ...
- Visual Studio 2012 开发环境配置+控制台工具+桌面应用程序
一.界面布局视图设置 1.窗口的布局.控制台窗口运行恢复到开发环境的设置方法 也可以保存好设好的个性化设置,导入设置: 2.视图|服务器资源管理器(sever explorer) 可以访问数据源.服务 ...
- SpringBoot系列: 极简Demo程序和Tomcat war包部署
=================================SpringBoot 标准项目创建步骤================================= 使用 Spring IDE( ...
- 自定义SpringBoot控制台输出的图案
pringboot启动的时候,控制台输出的图案叫banner banner?啥玩意儿?相信有些人,一定是一脸懵逼... ——这个就不陌生了吧,这个是我们启动springboot的时候,控制台输出的.. ...
随机推荐
- Js 与浮点数
同步发表在我的博客:jmingzi 当你学习一个知识点没有方向时,可以尝试以解决问题的角度来理解它. 例如这个知识点我们可以从以下问题开始: 你看的到 1 真的是整数 1 吗? 为什么0.1 + 0. ...
- CentOS7 安装 Redis 并设置开机启动
1.下载 https://redis.io/download cd /usr/local/src wget -c http://download.redis.io/releases/redis-3.2 ...
- Django forms组件里的ChoiceField、ModelChoiceField和ModelMutipleChoiceField的区别
阅读简要 首先我们要明白Django forms组件里的ChoiceField.ModelChoiceField和ModelMutipleChoiceField是继承关系 ChoiceField 1. ...
- C# DataTable to List<T> based on reflection.
From https://www.cnblogs.com/zjbky/p/9242140.html static class ExtendClass { public static List<T ...
- 数据库学习笔记day03
创建两个表,一个名为emp,一个名为dept,并且插入数据 create table emp(empno number(4,0),ename varchar2(10),job varchar2(9), ...
- 使用Git出现以下错误"Git@github.com: Permission denied (publickey). Could not read from remote repository."解决方案
转载于:https://blog.csdn.net/dotphoenix/article/details/100130424 git@github.com: Permission denied (pu ...
- Spring Cloud系列:不重启eureka,清除down掉的服务
场景描述 做项目的时候,我的服务改了个ip,然后重新启动后,原ip的服务down掉了,但是没有清楚掉,还在上面,导致我用swagger测试的时候,访问不到真正up的程序.重启eureka又不划算,于是 ...
- COSCon'19 | 如何设计新一代的图数据库 Nebula
11 月 2 号 - 11 月 3 号,以"大爱无疆,开源无界"为主题的 2019 中国开源年会(COSCon'19)正式启动,大会以开源治理.国际接轨.社区发展和开源项目为切入点 ...
- SpringCloud(八):springcloud遇到的坑总结
spring boot 版本演信息: 文章链接:https://github.com/spring-projects/spring-boot/releases?after=v2.0.0.M3 http ...
- 剑指offer笔记面试题3----数组中重复的数字
题目一:找出数组中重复的数字.在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如 ...