迷你图书管理器
author:luckyboy!
version:1.2
知识储备:变量、数据类型、选择结构、循环结构、数组 、面向对象、集合
系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理。
功能:
- 新增图书
- 查看图书
- 删除图书
- 借出图书
- 归还图书
- 退出图书系统
创建 .Java文件:Book类、MyBookMgr类、Test测试类
阶段划分
- 第一阶段:创建用来存储图书信息的Book类
- 第二阶段:创建集合和初始化方法,将初始化图书信息加入到集合
- 第三阶段:完成整体框架和退出功能
- 第四阶段:完成新增图书功能
- 第五阶段:完成查看图书功能
- 第六阶段:完成删除图书功能
- 第七阶段:完成借出图书功能
- 第八阶段:完成归还图书功能
第一阶段:创建用来存储图书信息的Book类
public class Book {
// 图书名称
private String name;
// 借阅状态,0:可借阅 ;1:已借出
private int state;
// 借出日期
private int date;
// 借出次数
private int count;
//无参构造方法
public Book() {
super();
}
//有参构造方法
public Book(String name, int state, int date, int count) {
super();
this.name = name;
this.state = state;
this.date = date;
this.count = count;
}
//get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return name + "\t" + state + "\t" + date
+ "\t" + count;
}
}
第二阶段:创建集合和初始化方法,将初始化图书信息加入到集合
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class MyBookMgr {
Scanner in = new Scanner(System.in);
//创建集合保存图书信息
List<Book> list = new LinkedList<Book>();
//初始化方法
public void inti(){
Book book1 = new Book("罗马假日", 1, 1, 15);
Book book2 = new Book("白雪公主", 0, 0, 12);
Book book3 = new Book("葫芦兄弟", 0, 0, 30);
//将图书信息保存到集合
list.add(book1);
list.add(book2);
list.add(book3);
}
}
第三阶段:完成整体框架和退出功能,此时完成测试类测试功能
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class MyBookMgr {
Scanner in = new Scanner(System.in);
//创建集合保存图书信息
List<Book> list = new LinkedList<Book>();
//初始化方法
public void inti(){
Book book1 = new Book("罗马假日", 1, 1, 15);
Book book2 = new Book("白雪公主", 0, 0, 12);
Book book3 = new Book("葫芦兄弟", 0, 0, 30);
//将图书信息保存到集合
list.add(book1);
list.add(book2);
list.add(book3);
}
//整体框架开始方法
public void start(){
int num;
// 输出欢迎语句,只输出一次
System.out.println("欢迎使用迷你图书管理器");
do{
// 输出菜单,循环输出多次
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("请选择(序号:1-6):");
int choose = in.nextInt();
//如果用户输入1-6以外的数字没有此功能,重新输入
while(choose < 1 || choose >6){
System.out.println("此功能不存在,请重新输入!");
choose = in.nextInt();
}
switch(choose){
//新增图书
case 1:
newBook();
break;
//查看图书
case 2:
lookBook();
break;
//删除图书
case 3:
delBook();
break;
//借出图书
case 4:
lendBook();
break;
//归还图书
case 5:
returnBook();
break;
//退出图书
case 6:
break;
}
//如果用户选择退出程序,则跳出循环,结束程序
if(choose == 6){
System.out.println("程序运行结束,感谢使用此程序!");
break;
}
System.out.println("输入0返回:");
num = in.nextInt();
//如果输入0以外的数字,则重新输入,只有功能6可以退出程序
while(num != 0){
System.out.println("输入0返回,请重新输入:");
num = in.nextInt();
}
}while(num == 0);
}
//新增图书方法
public void newBook(){
System.out.println("-> 新增图书");
}
//查看图书方法
public void lookBook(){
System.out.println("-> 查看图书");
}
//删除图书方法
public void delBook(){
System.out.println("-> 删除图书");
}
//借出图书方法
public void lendBook(){
System.out.println("-> 借出图书");
}
//归还图书方法
public void returnBook(){
System.out.println("-> 归还图书");
}
}
Test测试类
public class Test {
public static void main(String[] args) {
//实例化MyBookMgr类
MyBookMgr my = new MyBookMgr();
//调用MyBookMgr类中的inti初始化方法
my.inti();
//调用MyBookMgr类中的start整体框架开始方法
my.start();
}
}
第四阶段:完成新增图书功能
//新增图书方法
public void newBook() {
//思路:实例化Book类,将新的图书信息添加到集合
System.out.println("-> 新增图书");
System.out.println("请输入您要增加的图书:");
String bookName = in.next();
//实例化Book类
Book book = new Book(bookName, 0, 0, 0);
//将图书信息添加到集合
list.add(book);
System.out.println("新增《"+bookName+"》成功!");
}
第五阶段:完成查看图书功能
//查看图书方法
public void lookBook() {
//思路:输出集合中的图书信息
System.out.println("-> 查看图书");
System.out.println("序号\t图书名称\t状态\t时间\t次数");
for (int i = 0; i < list.size(); i++) {
//设置图书状态,1显示已借出,0显示可借阅
String states = list.get(i).getState() == 0 ? "可借阅" : "已借出";
//设置借出时间,0日不显示,其它已 数字+日 的形式显示
String dates = list.get(i).getDate() == 0 ? "" : list.get(i).getDate() + "日";
//设置借出次数,数字+次 的形式显示
String counts = list.get(i).getCount() + "次";
System.out.println((i+1) + "\t" + list.get(i).getName() + "\t" + states
+ "\t" + dates + "\t" + counts);
}
}
第六阶段:完成删除图书功能
//删除图书方法
public void delBook() {
/*
* 思路:
* 在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
* 在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
* 在集合中没有匹配到用户输入的图书名称,提示图书不存在
*/
System.out.println("-> 删除图书");
//设置标志位,区分图书是否存在
boolean flag = false;
System.out.println("请输入您要删除的图书:");
String bookName = in.next();
for (int i = 0; i < list.size(); i++) {
//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
list.remove(i);
System.out.println("删除《"+ bookName + "》成功!");
//图书存在,赋值true
flag = true;
}
//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
System.out.println("图书已借出,不能删除!");
//图书存在,赋值true
flag = true;
}
}
//如果标志位flag等于false,表示图书u不存在,给出图示信息
if(!flag){
System.out.println("此图书不存在!");
}
}
第七阶段:完成借出图书功能
//借出图书方法
public void lendBook() {
/*
* 图书状态可借阅,按照用户输入的图书名称借出指定图书,并判断输入的借出日期是否在1-31之间,否则重新输入日期。
* 图书状态已借出,给出相应提示
* 图书不存在,给出相应提示
*
* 思路
* ->用户输入需要借出的图书
* ->判断图书是否存在
* ->图书存在,判断图书是否借出
* ->图书存在,可借阅,判断用户输入的借出日期
* ->图书存在,可借阅,借出日期正确,修改图书的状态,借出日期和借出次数加1
*/
System.out.println("-> 借出图书");
//设置标志位,区分图书是否存在
boolean flag = false;
System.out.println("请输入您要借出的图书:");
String bookName = in.next();
for (int i = 0; i < list.size(); i++) {
//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以借出
if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
System.out.println("请输入借出日期(1-31):");
int dates = in.nextInt();
while(dates < 1 || dates > 31){
System.out.println("借出日期需要大于等于1且小于等于31,请重新输入:");
dates = in.nextInt();
}
//修改借出日期,图书状态,借出次数
list.get(i).setDate(dates);
list.get(i).setState(1);
//图书借出次数加1
int counts = list.get(i).getCount();
list.get(i).setCount(counts);
System.out.println("借出《"+ bookName + "》成功!");
//图书存在,赋值true
flag = true;
}
//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能借出
else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
System.out.println("图书已借出,不能重复借出!");
//图书存在,赋值true
flag = true;
}
}
//如果标志位flag等于false,表示图书u不存在,给出图示信息
if(!flag){
System.out.println("此图书不存在!");
}
}
第八阶段:完成归还图书功能
//归还图书方法
public void returnBook() {
/*
* 用户归还已借出的图书并计算租金。如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
* 用户归还的图书未借出,给出相应提示。
* 用户归还的图书不存在,给出相应提示。
*
* 思路:
* ->用户输入需要归还的图书
* ->判断图书是否存在
* ->判断图书是否借出
* ->判断用户输入的归还日期
* ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
*/
System.out.println("-> 归还图书");
//设置标志位,区分图书是否存在
boolean flag = false;
System.out.println("请输入您要归还的图书:");
String bookName = in.next();
for (int i = 0; i < list.size(); i++) {
//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书可以归还
if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
System.out.println("请输入借出日期(1-31):");
int dates = in.nextInt();
while(dates < list.get(i).getDate() || dates > 31){
if(dates < list.get(i).getDate()){
System.out.println("归还日期要大于借出日期,请重新输入:");
}else{
System.out.println("一个月最多31天,请重新输入:");
}
dates = in.nextInt();
}
//计算出租金,租金 = 归还日期 - 借出日期
int price = dates - list.get(i).getDate();
//修改归还图书的状态为可借阅,图示日期改为0
list.get(i).setState(0);
list.get(i).setDate(0);
System.out.println("归还《" + bookName + "》成功!");
System.out.println("应付租金:"+price);
//图书存在,赋值true
flag = true;
}
//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书不能归还
else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
System.out.println("图书未借出,不能归还!");
//图书存在,赋值true
flag = true;
}
}
//如果标志位flag等于false,表示图书u不存在,给出图示信息
if(!flag){
System.out.println("此图书不存在!");
}
}
完整代码如下
Book类代码
public class Book {
// 图书名称
private String name;
// 借阅状态,0:可借阅 ;1:已借出
private int state;
// 借出日期
private int date;
// 借出次数
private int count;
//无参构造方法
public Book() {
super();
}
//有参构造方法
public Book(String name, int state, int date, int count) {
super();
this.name = name;
this.state = state;
this.date = date;
this.count = count;
}
//get和set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return name + "\t" + state + "\t" + date
+ "\t" + count;
}
}
MyBookMgr类代码
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class MyBookMgr {
Scanner in = new Scanner(System.in);
// 创建集合保存图书信息
List<Book> list = new LinkedList<Book>();
// 初始化方法
public void inti() {
Book book1 = new Book("罗马假日", 1, 1, 15);
Book book2 = new Book("白雪公主", 0, 0, 12);
Book book3 = new Book("葫芦兄弟", 0, 0, 30);
// 将图书信息保存到集合
list.add(book1);
list.add(book2);
list.add(book3);
}
// 整体框架开始方法
public void start() {
int num;
// 输出欢迎语句,只输出一次
System.out.println("欢迎使用迷你图书管理器");
do {
// 输出菜单,循环输出多次
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("请选择(序号:1-6):");
int choose = in.nextInt();
// 如果用户输入1-6以外的数字没有此功能,重新输入
while (choose < 1 || choose > 6) {
System.out.println("此功能不存在,请重新输入!");
choose = in.nextInt();
}
switch (choose) {
// 新增图书
case 1:
newBook();
break;
// 查看图书
case 2:
lookBook();
break;
// 删除图书
case 3:
delBook();
break;
// 借出图书
case 4:
lendBook();
break;
// 归还图书
case 5:
returnBook();
break;
// 退出图书
case 6:
break;
}
// 如果用户选择退出程序,则跳出循环,结束程序
if (choose == 6) {
System.out.println("程序运行结束,感谢使用此程序!");
break;
}
System.out.println("输入0返回:");
num = in.nextInt();
// 如果输入0以外的数字,则重新输入,只有功能6可以退出程序
while (num != 0) {
System.out.println("输入0返回,请重新输入:");
num = in.nextInt();
}
} while (num == 0);
}
//新增图书方法
public void newBook() {
//思路:实例化Book类,将新的图书信息添加到集合
System.out.println("-> 新增图书");
System.out.println("请输入您要增加的图书:");
String bookName = in.next();
//实例化Book类
Book book = new Book(bookName, 0, 0, 0);
//将图书信息添加到集合
list.add(book);
System.out.println("新增《"+bookName+"》成功!");
}
//查看图书方法
public void lookBook() {
//思路:输出集合中的图书信息
System.out.println("-> 查看图书");
System.out.println("序号\t图书名称\t状态\t时间\t次数");
for (int i = 0; i < list.size(); i++) {
//设置图书状态,1显示已借出,0显示可借阅
String states = list.get(i).getState() == 0 ? "可借阅" : "已借出";
//设置借出时间,0日不显示,其它已 数字+日 的形式显示
String dates = list.get(i).getDate() == 0 ? "" : list.get(i).getDate() + "日";
//设置借出次数,数字+次 的形式显示
String counts = list.get(i).getCount() + "次";
System.out.println((i+1) + "\t" + list.get(i).getName() + "\t" + states
+ "\t" + dates + "\t" + counts);
}
}
//删除图书方法
public void delBook() {
/*
* 思路:
* 在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
* 在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
* 在集合中没有匹配到用户输入的图书名称,提示图书不存在
*/
System.out.println("-> 删除图书");
//设置标志位,区分图书是否存在
boolean flag = false;
System.out.println("请输入您要删除的图书:");
String bookName = in.next();
for (int i = 0; i < list.size(); i++) {
//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
list.remove(i);
System.out.println("删除《"+ bookName + "》成功!");
//图书存在,赋值true
flag = true;
}
//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
System.out.println("图书已借出,不能删除!");
//图书存在,赋值true
flag = true;
}
}
//如果标志位flag等于false,表示图书u不存在,给出图示信息
if(!flag){
System.out.println("此图书不存在!");
}
}
//借出图书方法
public void lendBook() {
/*
* 图书状态可借阅,按照用户输入的图书名称借出指定图书,并判断输入的借出日期是否在1-31之间,否则重新输入日期。
* 图书状态已借出,给出相应提示
* 图书不存在,给出相应提示
*
* 思路
* ->用户输入需要借出的图书
* ->判断图书是否存在
* ->图书存在,判断图书是否借出
* ->图书存在,可借阅,判断用户输入的借出日期
* ->图书存在,可借阅,借出日期正确,修改图书的状态,借出日期和借出次数加1
*/
System.out.println("-> 借出图书");
//设置标志位,区分图书是否存在
boolean flag = false;
System.out.println("请输入您要借出的图书:");
String bookName = in.next();
for (int i = 0; i < list.size(); i++) {
//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以借出
if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
System.out.println("请输入借出日期(1-31):");
int dates = in.nextInt();
while(dates < 1 || dates > 31){
System.out.println("借出日期需要大于等于1且小于等于31,请重新输入:");
dates = in.nextInt();
}
//修改借出日期,图书状态,借出次数
list.get(i).setDate(dates);
list.get(i).setState(1);
//图书借出次数加1
int counts = list.get(i).getCount();
list.get(i).setCount(counts);
System.out.println("借出《"+ bookName + "》成功!");
//图书存在,赋值true
flag = true;
}
//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能借出
else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
System.out.println("图书已借出,不能重复借出!");
//图书存在,赋值true
flag = true;
}
}
//如果标志位flag等于false,表示图书u不存在,给出图示信息
if(!flag){
System.out.println("此图书不存在!");
}
}
//归还图书方法
public void returnBook() {
/*
* 用户归还已借出的图书并计算租金。如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
* 用户归还的图书未借出,给出相应提示。
* 用户归还的图书不存在,给出相应提示。
*
* 思路:
* ->用户输入需要归还的图书
* ->判断图书是否存在
* ->判断图书是否借出
* ->判断用户输入的归还日期
* ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
*/
System.out.println("-> 归还图书");
//设置标志位,区分图书是否存在
boolean flag = false;
System.out.println("请输入您要归还的图书:");
String bookName = in.next();
for (int i = 0; i < list.size(); i++) {
//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书可以归还
if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
System.out.println("请输入借出日期(1-31):");
int dates = in.nextInt();
while(dates < list.get(i).getDate() || dates > 31){
if(dates < list.get(i).getDate()){
System.out.println("归还日期要大于借出日期,请重新输入:");
}else{
System.out.println("一个月最多31天,请重新输入:");
}
dates = in.nextInt();
}
//计算出租金,租金 = 归还日期 - 借出日期
int price = dates - list.get(i).getDate();
//修改归还图书的状态为可借阅,图示日期改为0
list.get(i).setState(0);
list.get(i).setDate(0);
System.out.println("归还《" + bookName + "》成功!");
System.out.println("应付租金:"+price);
//图书存在,赋值true
flag = true;
}
//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书不能归还
else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
System.out.println("图书未借出,不能归还!");
//图书存在,赋值true
flag = true;
}
}
//如果标志位flag等于false,表示图书u不存在,给出图示信息
if(!flag){
System.out.println("此图书不存在!");
}
}
}
Test测试类代码
public class Test {
public static void main(String[] args) {
//实例化MyBookMgr类
MyBookMgr my = new MyBookMgr();
//调用MyBookMgr类中的inti初始化方法
my.inti();
//调用MyBookMgr类中的start整体框架开始方法
my.start();
}
}