迷你图书管理器
author:luckyboy!
version:10
知识储备:变量、数据类型、选择结构、循环结构、数组
系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理。
功能:
- 新增图书
- 查看图书
- 删除图书
- 借出图书
- 归还图书
- 退出图书系统
阶段划分
- 第一阶段:创建数组保存图书信息,并初始化
- 第二阶段:完成系统整体框架和退出功能
- 第三阶段:完成新增图书功能
- 第四阶段:完成查看图书功能
- 第五阶段:完成删除图书功能
- 第六阶段:完成借出图书功能
- 第七阶段:完成归还图书功能
第一阶段:创建数组保存图书信息,并初始化
public class MyBookMgr {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//创建数组保存图书信息, 图书相关信息,最多只能存储6个图书信息
String[] name = new String[6]; // 图书名称
int[] state = new int[6]; // 借阅状态,0:可借阅 ;1:已借出
int[] date = new int[6]; // 借出日期
int[] count = new int[6]; // 借出次数
//初始化图书信息
// 初始化第一本本图书
name[0] = "罗马假日";
state[0] = 1;
date[0] = 1;
count[0] = 15;
// 初始化第二本图书
name[1] = "白雪公主";
state[1] = 0;
count[1] = 12;
// 初始化第三本图书
name[2] = "葫芦兄弟";
state[2] = 0;
count[2] = 30;
}
}
第二阶段:完成系统整体框架和退出功能
public class MyBookMgr {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//创建数组保存图书信息, 图书相关信息,最多只能存储6个图书信息
String[] name = new String[6]; // 图书名称
int[] state = new int[6]; // 借阅状态,0:可借阅 ;1:已借出
int[] date = new int[6]; // 借出日期
int[] count = new int[6]; // 借出次数
//初始化图书信息
// 初始化第一本本图书
name[0] = "罗马假日";
state[0] = 1;
date[0] = 1;
count[0] = 15;
// 初始化第二本图书
name[1] = "白雪公主";
state[1] = 0;
count[1] = 12;
// 初始化第三本图书
name[2] = "葫芦兄弟";
state[2] = 0;
count[2] = 30;
//完成整体框架
int num = 0;
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("请选择(序号:1-6):");
int choose = in.nextInt();
//如果用户选择的是1-6以外的数组,则没有此功能,需要重新输入
while(choose < 1 || choose > 6){
System.out.println("对不起,没有此功能,请重新选择(序号:1-6):");
}
switch(choose){
case 1:
System.out.println("1.新增图书");
break;
case 2:
System.out.println("2.查看图书");
break;
case 3:
System.out.println("3.删除图书");
break;
case 4:
System.out.println("4.借出图书");
break;
case 5:
System.out.println("5.归还图书");
break;
}
//如果choose等于6,退出图书系统,结束程序运行
if(choose == 6){
break;
}
System.out.println("输入0返回:");
num = in.nextInt();
//如果输入0以外的数字,则重新输入,只有退出图书功能可以结束程序
while(num != 0){
System.out.println("对不起,输入错误,输入0返回:");
num = in.nextInt();
}
}while(num == 0);
System.out.println("程序运行结束,感谢使用此程序!");
}
}
第三阶段:完成新增图书功能
思路:
->如果未存储满6个图书惜,向个数组中存储相应的图书信息
->如果已经存储了6个图书,则提示图书已满,不能添加图书信息
//新增图书
case 1:
/*
* 如果未存储满6个图书惜,向个数组中存储相应的图书信息
* 如果已经存储了6个图书,则提示图书已满,不能添加图书信息
*/
System.out.println("-> 新增图书");
//设置标志位,如果可以添加图书信息为true,否则为false
boolean newFlag = false;
System.out.println("请输入您要添加的图书名称: ");
String bookName = in.next();
for (int i = 0; i < name.length; i++) {
//如果name数组为空,则表示各数组中有剩余空间存储图书信息
if(name[i] == null){
name[i] = bookName;
System.out.println("新增《"+bookName+"》成功!");
newFlag = true;
break;
}
}
//如果newFlag等于false,书名图书已满,不能添加图书信息
if(!newFlag){
System.out.println("图书已满,不能添加图书信息!");
}
break;
第四阶段:完成查看图书功能
思路:循环输出各数组中的图书信息,循环条件name[i]!=null
//查看图书
case 2:
//循环输出各数组中的图书信息,循环条件name[i]!=null
System.out.println("-> 查看图书");
System.out.println("序号\t图书\t 状态\t日期\t次数");
//输出各数组中不为空的图书信息
for (int i = 0; i < name.length; i++) {
if(name[i] != null){
String stat = state[i] == 0 ? "可借阅" : "已借出";
String dates = date[i] == 0 ? "" : date[i] + "日";
String counts = count[i] + "次";
System.out.println((i+1) + "\t" + name[i] + "\t " + stat + "\t"
+ dates + "\t" + counts);
}
}
break;
第五阶段:完成删除图书功能
情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
情况三:按照用户输入的图书名称没有找到指定的图书。此图书不存在
思路
->查找到要删除的图书
->把图书后面的图书一次向前移动以为,实现删除
->各数组最后一位元素清空
//删除图书
case 3:
/*
* 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
* 情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
* 情况三:按照用户输入的图书名称没有找到指定的图书。此图书不存在
*
* 思路
* ->查找到要删除的图书
* ->把图书后面的图书一次向前移动以为,实现删除
* ->各数组最后一位元素清空
*
*/
System.out.println("-> 删除图书");
System.out.println("请输入您要删除的图书:");
String delBook = in.next();
//设置变量用来保存删除图书的元素下标
int index = -1;
//设置标志位用来区分图书是否存满
boolean delFlag = false;
for (int i = 0; i < name.length; i++) {
//图书名相同,状态为可借阅,可以删除图书
if(name[i].equals(delBook) && state[i] == 0){
index = i;
delFlag = true;
System.out.println("删除《"+name[index]+"》成功!");
//删除图书
if(index != -1){
for (int j = index+1; j < count.length; j++) {
name[j-1] = name[j];
state[j-1] = state[j];
date[j-1] = date[j];
count[j-1] = count[j];
break;
}
//各数组最后一位元素清空
name[name.length-1] = null;
state[state.length-1] = 0;
date[date.length-1] = 0;
count[count.length-1] = 0;
}
break;
}
//图书名相同,状态为已借出,不能删除图书
else if(name[i].equals(delBook) && state[i] == i){
System.out.println("此图书已借出,不能删除!");
delFlag = true;
}
}
//如果delFlag标志位等于false,表示此图书不存在
if(!delFlag){
System.out.println("对不起,此图书不存在!");
}
break;
第六阶段:完成借出图书功能
情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,并判断输入的借出日期是否 在1-31之间,否则重新输入日期。
情况二:图书状态已借出,给出相应提示
情况三:用户输入的图书不存在,给出相应提示。
思路
->用户输入需要借出的图书
->判断图书是否存在
->图书存在,判断图书是否借出
->图书存在,可借阅,判断用户输入的借出日期
->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
//借出图书
case 4:
/*
* 情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,
* 并判断输入的借出日期是否在1-31之间,否则重新输入日期。
* 情况二:图书状态已借出,给出相应提示
* 情况三:用户输入的图书不存在,给出相应提示。
*
* 思路
* ->用户输入需要借出的图书
* ->判断图书是否存在
* ->图书存在,判断图书是否借出
* ->图书存在,可借阅,判断用户输入的借出日期
* ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
*
*/
System.out.println("-> 借出图书");
//设置标志位,判断图示是否存在
boolean lendBook = false;
//用户输入需要借出的图书
System.out.println("请输入您要借出的图书:");
String book = in.next();
//判断图书是否存在
for(int i = 0; i < name.length; i++) {
//判断图书存在,图书状态可借阅
if(book.equals(name[i]) && state[i] == 0){
//判断用户输入的借出日期
System.out.println("请输入借出日期(1-31):");
date[i] = in.nextInt();
while(date[i] < 1 || date[i] > 31){
System.out.println("借出日期需要大于等于1且小于等于31,请重新输入:");
date[i] = in.nextInt();
}
//修改图书的状态和借出次数加1
state[i] = 1;
count[i]++;
lendBook = true;
System.out.println(name[i] + "借出成功!");
}
//判断图书存在,图书状态已借出
else if(book.equals(name[i]) && state[i] == 1){
System.out.println("对不起,此图书已借出,不能借阅!");
lendBook = true;
}
}
//如果标志位lendBook等于false,则表示图书不存在
if(!lendBook){
System.out.println("对不起,此图书不存在!");
}
break;
第七阶段:完成归还图书功能
情况一:归还已借出的图书并计算租金。如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
情况二:归还的图书未借出,给出相应提示
情况三:归还的图书不存在,给出相应提示
思路:
->用户输入需要归还的图书
->判断图书是否存在
->判断图书是否借出
->判断用户输入的归还日期
->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
//归还图书
case 5:
/*
* 情况一:归还已借出的图书并计算租金。
* 如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
* 情况二:归还的图书未借出,给出相应提示
* 情况三:归还的图书不存在,给出相应提示
*
* 思路:
* ->用户输入需要归还的图书
* ->判断图书是否存在
* ->判断图书是否借出
* ->判断用户输入的归还日期
* ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
*/
System.out.println("-> 归还图书");
//设置标志位,判断图示是否存在
boolean backFlag = false;
//用户输入需要归还的图书
System.out.println("请输入需要归还的图书:");
String giveBack = in.next();
for (int i = 0; i < name.length; i++) {
//判断图书存在,图书已借出
if(giveBack.equals(name[i]) && state[i] == 1){
System.out.println("请输入归还日期(大于借出日期并且小于31):");
int time = in.nextInt();
while(time < date[i] || time > 31){
if(time < date[i]){
System.out.println("归还日期要大于借出日期,请重新输入:");
}else{
System.out.println("一个月最多31天,请重新输入:");
}
time = in.nextInt();
}
//修改归还图书的状态和日期,并计算出租金,租金 = 归还日期 - 借出日期
state[i] = 0;
date[i] = 0;
int price = time - date[i];
System.out.println(name[i]+"归还成功!");
System.out.println("应付租金:"+price);
backFlag = true;
}//判断图书存在,图书可借阅
else if(giveBack.equals(name[i]) && state[i] == 0){
System.out.println("对不起,此图书未借出,不能归还!");
backFlag = true;
}
}
//如果标志位backFlag还等于false,则表示图书不存在
if(!backFlag){
System.out.println("对不起。此图书不存在!");
}
break;
完整代码如下:MyBookMgr
import java.util.Scanner;
public class MyBookMgr {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//创建数组保存图书信息, 图书相关信息,最多只能存储6个图书信息
String[] name = new String[6]; // 图书名称
int[] state = new int[6]; // 借阅状态,0:可借阅 ;1:已借出
int[] date = new int[6]; // 借出日期
int[] count = new int[6]; // 借出次数
//初始化图书信息
// 初始化第一本本图书
name[0] = "罗马假日";
state[0] = 1;
date[0] = 1;
count[0] = 15;
// 初始化第二本图书
name[1] = "白雪公主";
state[1] = 0;
count[1] = 12;
// 初始化第三本图书
name[2] = "葫芦兄弟";
state[2] = 0;
count[2] = 30;
//完成整体框架
int num = 0;
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("请选择(序号:1-6):");
int choose = in.nextInt();
//如果用户选择的是1-6以外的数组,则没有此功能,需要重新输入
while(choose < 1 || choose > 6){
System.out.println("对不起,没有此功能,请重新选择(序号:1-6):");
}
switch(choose){
//新增图书
case 1:
/*
* 如果未存储满6个图书惜,向个数组中存储相应的图书信息
* 如果已经存储了6个图书,则提示图书已满,不能添加图书信息
*/
System.out.println("-> 新增图书");
//设置标志位,如果可以添加图书信息为true,否则为false
boolean newFlag = false;
System.out.println("请输入您要添加的图书名称: ");
String bookName = in.next();
for (int i = 0; i < name.length; i++) {
//如果name数组为空,则表示各数组中有剩余空间存储图书信息
if(name[i] == null){
name[i] = bookName;
System.out.println("新增《"+bookName+"》成功!");
newFlag = true;
break;
}
}
//如果newFlag等于false,书名图书已满,不能添加图书信息
if(!newFlag){
System.out.println("图书已满,不能添加图书信息!");
}
break;
//查看图书
case 2:
//循环输出各数组中的图书信息,循环条件name[i]!=null
System.out.println("-> 查看图书");
System.out.println("序号\t图书\t 状态\t日期\t次数");
//输出各数组中不为空的图书信息
for (int i = 0; i < name.length; i++) {
if(name[i] != null){
String stat = state[i] == 0 ? "可借阅" : "已借出";
String dates = date[i] == 0 ? "" : date[i] + "日";
String counts = count[i] + "次";
System.out.println((i+1) + "\t" + name[i] + "\t " + stat + "\t"
+ dates + "\t" + counts);
}
}
break;
//删除图书
case 3:
/*
* 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
* 情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
* 情况三:按照用户输入的图书名称没有找到指定的图书。此图书不存在
*
* 思路
* ->查找到要删除的图书
* ->把图书后面的图书一次向前移动以为,实现删除
* ->各数组最后一位元素清空
*
*/
System.out.println("-> 删除图书");
System.out.println("请输入您要删除的图书:");
String delBook = in.next();
//设置变量用来保存删除图书的元素下标
int index = -1;
//设置标志位用来区分图书是否存满
boolean delFlag = false;
for (int i = 0; i < name.length; i++) {
//图书名相同,状态为可借阅,可以删除图书
if(name[i].equals(delBook) && state[i] == 0){
index = i;
delFlag = true;
System.out.println("删除《"+name[index]+"》成功!");
//删除图书
if(index != -1){
for (int j = index+1; j < count.length; j++) {
name[j-1] = name[j];
state[j-1] = state[j];
date[j-1] = date[j];
count[j-1] = count[j];
break;
}
//各数组最后一位元素清空
name[name.length-1] = null;
state[state.length-1] = 0;
date[date.length-1] = 0;
count[count.length-1] = 0;
}
break;
}
//图书名相同,状态为已借出,不能删除图书
else if(name[i].equals(delBook) && state[i] == i){
System.out.println("此图书已借出,不能删除!");
delFlag = true;
}
}
//如果delFlag标志位等于false,表示此图书不存在
if(!delFlag){
System.out.println("对不起,此图书不存在!");
}
break;
//借出图书
case 4:
/*
* 情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,
* 并判断输入的借出日期是否在1-31之间,否则重新输入日期。
* 情况二:图书状态已借出,给出相应提示
* 情况三:用户输入的图书不存在,给出相应提示。
*
* 思路
* ->用户输入需要借出的图书
* ->判断图书是否存在
* ->图书存在,判断图书是否借出
* ->图书存在,可借阅,判断用户输入的借出日期
* ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
*
*/
System.out.println("-> 借出图书");
//设置标志位,判断图示是否存在
boolean lendBook = false;
//用户输入需要借出的图书
System.out.println("请输入您要借出的图书:");
String book = in.next();
//判断图书是否存在
for(int i = 0; i < name.length; i++) {
//判断图书存在,图书状态可借阅
if(book.equals(name[i]) && state[i] == 0){
//判断用户输入的借出日期
System.out.println("请输入借出日期(1-31):");
date[i] = in.nextInt();
while(date[i] < 1 || date[i] > 31){
System.out.println("借出日期需要大于等于1且小于等于31,请重新输入:");
date[i] = in.nextInt();
}
//修改图书的状态和借出次数加1
state[i] = 1;
count[i]++;
lendBook = true;
System.out.println(name[i] + "借出成功!");
}
//判断图书存在,图书状态已借出
else if(book.equals(name[i]) && state[i] == 1){
System.out.println("对不起,此图书已借出,不能借阅!");
lendBook = true;
}
}
//如果标志位lendBook等于false,则表示图书不存在
if(!lendBook){
System.out.println("对不起,此图书不存在!");
}
break;
//归还图书
case 5:
/*
* 情况一:归还已借出的图书并计算租金。
* 如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
* 情况二:归还的图书未借出,给出相应提示
* 情况三:归还的图书不存在,给出相应提示
*
* 思路:
* ->用户输入需要归还的图书
* ->判断图书是否存在
* ->判断图书是否借出
* ->判断用户输入的归还日期
* ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
*/
System.out.println("-> 归还图书");
//设置标志位,判断图示是否存在
boolean backFlag = false;
//用户输入需要归还的图书
System.out.println("请输入需要归还的图书:");
String giveBack = in.next();
for (int i = 0; i < name.length; i++) {
//判断图书存在,图书已借出
if(giveBack.equals(name[i]) && state[i] == 1){
System.out.println("请输入归还日期(大于借出日期并且小于31):");
int time = in.nextInt();
while(time < date[i] || time > 31){
if(time < date[i]){
System.out.println("归还日期要大于借出日期,请重新输入:");
}else{
System.out.println("一个月最多31天,请重新输入:");
}
time = in.nextInt();
}
//修改归还图书的状态和日期,并计算出租金,租金 = 归还日期 - 借出日期
state[i] = 0;
date[i] = 0;
int price = time - date[i];
System.out.println(name[i]+"归还成功!");
System.out.println("应付租金:"+price);
backFlag = true;
}//判断图书存在,图书可借阅
else if(giveBack.equals(name[i]) && state[i] == 0){
System.out.println("对不起,此图书未借出,不能归还!");
backFlag = true;
}
}
//如果标志位backFlag还等于false,则表示图书不存在
if(!backFlag){
System.out.println("对不起。此图书不存在!");
}
break;
}
//如果choose等于6,退出图书系统,结束程序运行
if(choose == 6){
break;
}
System.out.println("输入0返回:");
num = in.nextInt();
//如果输入0以外的数字,则重新输入,只有退出图书功能可以结束程序
while(num != 0){
System.out.println("对不起,输入错误,输入0返回:");
num = in.nextInt();
}
}while(num == 0);
System.out.println("程序运行结束,感谢使用此程序!");
}
}