迷你图书管理器
author:luckyboy!
version:10
知识储备:变量、数据类型、选择结构、循环结构、数组 、面向对象
系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理。
功能:
- 新增图书
- 查看图书
- 删除图书
- 借出图书
- 归还图书
- 退出图书系统
创建 .Java文件:Book类、MyBookMgr类、Test测试类
阶段划分
- 第一阶段:创建用来存储图书信息的Book类
- 第二阶段:实例化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;
}
}
第二阶段:实例化Book类并初始化图书信息
import java.util.Scanner;
public class MyBookMgr {
Scanner in = new Scanner(System.in);
//创建Book类数组,将inti方法中的图书信息保存到Book类数组中
Book[] book = new Book[6];
public void inti(){
book[0] = new Book("罗马假日", 1, 1, 15);
book[1] = new Book("白雪公主", 0, 0, 12);
book[2] = new Book("葫芦兄弟", 0, 0, 30);
}
}
第三阶段:完成整体框架和退出功能,此时完成测试类测试功能
import java.util.Scanner;
public class MyBookMgr {
Scanner in = new Scanner(System.in);
//创建Book类数组,将inti方法中的图书信息保存到Book类数组中
Book[] book = new Book[6];
public void inti(){
book[0] = new Book("罗马假日", 1, 1, 15);
book[1] = new Book("白雪公主", 0, 0, 12);
book[2] = new Book("葫芦兄弟", 0, 0, 30);
}
//整体框架开始方法
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(){
/*
* 如果未存储满6个图书惜,向个数组中存储相应的图书信息
* 如果已经存储了6个图书,则提示图书已满,不能添加图书信息
*/
System.out.println("-> 新增图书");
//设置标志位,区分图书是否已满
boolean flag = false;
System.out.println("请输入您要添加的图书名称:");
String newBook = in.next();
for (int i = 0; i < book.length; i++) {
//如果book类数组中的图书名有空位置,则可以添加图书
if(book[i] == null){
book[i] = new Book(newBook, 0, 0, 0);
System.out.println("新增《"+newBook+"》成功!");
flag = true;
break;
}
}
//如果标志位flag还等于false,表示图书已满
if(!flag){
System.out.println("对不起,图书已满!");
}
}
第五阶段:完成查看图书功能
//查看图书方法
public void lookBook(){
//循环输出Book类数组中的图书信息,循环条件name[i]!=null
System.out.println("-> 查看图书");
System.out.println("序号\t图书名称\t 日期\t状态\t次数");
for (int i = 0; i < book.length; i++) {
//如果book类数组中不为空的图书信息
if(book[i] != null){
//借阅日期取出,后面加上日,如果等于0则不显示
String dates = book[i].getDate() == 0 ? "" : book[i].getDate() + "日";
//图书状态取出,如果等于1,显示已借出;如果等于0,显示可借阅。
String states = book[i].getState() == 0 ? "可借阅" : "已借出";
//图书借阅日期取出,后面加上次数
String counts = book[i].getCount()+"次";
System.out.println((i+1) + "\t" + book[i].getName() + "\t " + dates+ "\t" + states + "\t" + counts);
}
}
}
第六阶段:完成删除图书功能
//删除图书方法
public void delBook(){
/*
* 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
* 情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
*
* 思路
* ->查找到要删除的图书
* ->把图书后面的图书一次向前移动以为,实现删除
* ->把book数组最后一位元素清空
*/
System.out.println("-> 删除图书");
//记录需要删除的图书下标
int index = -1;
System.out.println("请输入您要删除的图书名称:");
String bookName = in.next();
for (int i = 0; i < book.length; i++) {
//图书名相同,状态为可借阅,可以删除图书
if(book[i].getName().equals(bookName) && book[i].getState() == 0){
System.out.println("删除《" + bookName + "》成功!");
index = i;
break;
}
//图书名相同,状态为已借出,不能删除图书
else if(book[i].getName().equals(bookName) && book[i].getState() == 1){
System.out.println("此图书已借出,不能删除!");
break;
}
}
//删除图书
if(index != -1){
for (int i = index+1; i < book.length; i++) {
book[i-1] = book[i];
}
//如果下标是组后一位5的话,把book数组最后一位元素清空
if(index == 5){
book[book.length-1] = new Book(null, 0, 0, 0);
}
}
}
第七阶段:完成借出图书功能
//借出图书方法
public void lendBook(){
/*
* 情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,
* 并判断输入的借出日期是否在1-31之间,否则重新输入日期。
* 情况二:图书状态已借出,给出相应提示
*
* 思路
* ->用户输入需要借出的图书
* ->判断图书是否存在
* ->图书存在,判断图书是否借出
* ->图书存在,可借阅,判断用户输入的借出日期
* ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
*
*/
System.out.println("-> 借出图书");
System.out.println("请输入您要借出的图书:");
String bookName = in.next();
for (int i = 0; i < book.length; i++) {
//图书名相同,状态为可借阅,可以借出图书
if(book[i].getName().equals(bookName) && book[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();
}
//修改图书的状态,日期和借出次数加1
book[i].setState(1);
book[i].setDate(dates);
int counts = book[i].getCount() + 1;
book[i].setCount(counts);
System.out.println("借出《" + bookName + "》成功!");
break;
}
//图书名相同,状态为已借出,不能借出图书
else if(book[i].getName().equals(bookName) && book[i].getState() == 1){
System.out.println("此图书已借出,不能重复借出!");
break;
}
}
}
第八阶段:完成归还图书功能
//归还图书方法
public void returnBook(){
/*
* 情况一:归还已借出的图书并计算租金。
* 如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
* 情况二:归还的图书未借出,给出相应提示
*
* 思路:
* ->用户输入需要归还的图书
* ->判断图书是否存在
* ->判断图书是否借出
* ->判断用户输入的归还日期
* ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
*/
System.out.println("-> 归还图书");
//用户输入需要归还的图书
System.out.println("请输入需要归还的图书:");
String bookName = in.next();
for (int i = 0; i < book.length; i++) {
//判断图书存在,图书已借出
if(book[i].getName().equals(bookName) && book[i].getState() == 1){
System.out.println("请输入归还日期(大于借出日期并且小于31):");
int dates = in.nextInt();
while(dates < book[i].getDate() || dates > 31){
if(dates < book[i].getDate()){
System.out.println("归还日期要大于借出日期,请重新输入:");
}else{
System.out.println("一个月最多31天,请重新输入:");
}
dates = in.nextInt();
}
//修改归还图书的状态,并计算出租金,租金 = 归还日期 - 借出日期
book[i].setState(0);
book[i].setDate(0);
int price = dates - book[i].getDate();
System.out.println("图书《"+book[i].getName()+"》归还成功!");
System.out.println("应付租金:"+price);
break;
}//判断图书存在,图书可借阅
else if(book[i].getName().equals(bookName) && book[i].getState() == 0){
System.out.println("对不起,此图书未借出,不能归还!");
break;
}
}
}
完整代码如下
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;
}
}
MyBookMgr类:
import java.util.Scanner;
public class MyBookMgr {
Scanner in = new Scanner(System.in);
//创建Book类数组,将inti方法中的图书信息保存到Book类数组中
Book[] book = new Book[6];
public void inti(){
book[0] = new Book("罗马假日", 1, 1, 15);
book[1] = new Book("白雪公主", 0, 0, 12);
book[2] = new Book("葫芦兄弟", 0, 0, 30);
}
//整体框架开始方法
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(){
/*
* 如果未存储满6个图书惜,向个数组中存储相应的图书信息
* 如果已经存储了6个图书,则提示图书已满,不能添加图书信息
*/
System.out.println("-> 新增图书");
//设置标志位,区分图书是否已满
boolean flag = false;
System.out.println("请输入您要添加的图书名称:");
String newBook = in.next();
for (int i = 0; i < book.length; i++) {
//如果book类数组中的图书名有空位置,则可以添加图书
if(book[i] == null){
book[i] = new Book(newBook, 0, 0, 0);
System.out.println("新增《"+newBook+"》成功!");
flag = true;
break;
}
}
//如果标志位flag还等于false,表示图书已满
if(!flag){
System.out.println("对不起,图书已满!");
}
}
//查看图书方法
public void lookBook(){
//循环输出Book类数组中的图书信息,循环条件name[i]!=null
System.out.println("-> 查看图书");
System.out.println("序号\t图书名称\t 日期\t状态\t次数");
for (int i = 0; i < book.length; i++) {
//如果book类数组中不为空的图书信息
if(book[i] != null){
//借阅日期取出,后面加上日,如果等于0则不显示
String dates = book[i].getDate() == 0 ? "" : book[i].getDate() + "日";
//图书状态取出,如果等于1,显示已借出;如果等于0,显示可借阅。
String states = book[i].getState() == 0 ? "可借阅" : "已借出";
//图书借阅日期取出,后面加上次数
String counts = book[i].getCount()+"次";
System.out.println((i+1) + "\t" + book[i].getName() + "\t " + dates+ "\t" + states + "\t" + counts);
}
}
}
//删除图书方法
public void delBook(){
/*
* 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
* 情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
*
* 思路
* ->查找到要删除的图书
* ->把图书后面的图书一次向前移动以为,实现删除
* ->把book数组最后一位元素清空
*/
System.out.println("-> 删除图书");
//记录需要删除的图书下标
int index = -1;
System.out.println("请输入您要删除的图书名称:");
String bookName = in.next();
for (int i = 0; i < book.length; i++) {
//图书名相同,状态为可借阅,可以删除图书
if(book[i].getName().equals(bookName) && book[i].getState() == 0){
System.out.println("删除《" + bookName + "》成功!");
index = i;
break;
}
//图书名相同,状态为已借出,不能删除图书
else if(book[i].getName().equals(bookName) && book[i].getState() == 1){
System.out.println("此图书已借出,不能删除!");
break;
}
}
//删除图书
if(index != -1){
for (int i = index+1; i < book.length; i++) {
book[i-1] = book[i];
}
//如果下标是组后一位5的话,把book数组最后一位元素清空
if(index == 5){
book[book.length-1] = new Book(null, 0, 0, 0);
}
}
}
//借出图书方法
public void lendBook(){
/*
* 情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,
* 并判断输入的借出日期是否在1-31之间,否则重新输入日期。
* 情况二:图书状态已借出,给出相应提示
*
* 思路
* ->用户输入需要借出的图书
* ->判断图书是否存在
* ->图书存在,判断图书是否借出
* ->图书存在,可借阅,判断用户输入的借出日期
* ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
*
*/
System.out.println("-> 借出图书");
boolean flag = false;
System.out.println("请输入您要借出的图书:");
String bookName = in.next();
for (int i = 0; i < book.length; i++) {
//图书名相同,状态为可借阅,可以借出图书
if(book[i].getName().equals(bookName) && book[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();
}
//修改图书的状态,日期和借出次数加1
book[i].setState(1);
book[i].setDate(dates);
int counts = book[i].getCount() + 1;
book[i].setCount(counts);
System.out.println("借出《" + bookName + "》成功!");
break;
}
//图书名相同,状态为已借出,不能借出图书
else if(book[i].getName().equals(bookName) && book[i].getState() == 1){
System.out.println("此图书已借出,不能重复借出!");
break;
}
}
}
//归还图书方法
public void returnBook(){
/*
* 情况一:归还已借出的图书并计算租金。
* 如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
* 情况二:归还的图书未借出,给出相应提示
*
* 思路:
* ->用户输入需要归还的图书
* ->判断图书是否存在
* ->判断图书是否借出
* ->判断用户输入的归还日期
* ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
*/
System.out.println("-> 归还图书");
//用户输入需要归还的图书
System.out.println("请输入需要归还的图书:");
String bookName = in.next();
for (int i = 0; i < book.length; i++) {
//判断图书存在,图书已借出
if(book[i].getName().equals(bookName) && book[i].getState() == 1){
System.out.println("请输入归还日期(大于借出日期并且小于31):");
int dates = in.nextInt();
while(dates < book[i].getDate() || dates > 31){
if(dates < book[i].getDate()){
System.out.println("归还日期要大于借出日期,请重新输入:");
}else{
System.out.println("一个月最多31天,请重新输入:");
}
dates = in.nextInt();
}
//修改归还图书的状态,并计算出租金,租金 = 归还日期 - 借出日期
book[i].setState(0);
book[i].setDate(0);
int price = dates - book[i].getDate();
System.out.println("图书《"+book[i].getName()+"》归还成功!");
System.out.println("应付租金:"+price);
break;
}//判断图书存在,图书可借阅
else if(book[i].getName().equals(bookName) && book[i].getState() == 0){
System.out.println("对不起,此图书未借出,不能归还!");
break;
}
}
}
}
Test测试类:
public class Test {
public static void main(String[] args) {
//实例化MyBookMgr类
MyBookMgr my = new MyBookMgr();
//调用MyBookMgr类中的inti初始化方法
my.inti();
//调用MyBookMgr类中的start整体框架开始方法
my.start();
}
}