迷你图书管理器

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,否则为falseboolean 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]!=nullSystem.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();}//修改图书的状态和借出次数加1state[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,否则为falseboolean 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]!=nullSystem.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();}//修改图书的状态和借出次数加1state[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("程序运行结束,感谢使用此程序!");}}

迷你图书管理器1.0 - 变量+数组相关推荐

  1. 迷你图书管理器1.1 - 面向对象+数组

    迷你图书管理器 author:luckyboy! version:10 知识储备:变量.数据类型.选择结构.循环结构.数组 .面向对象 系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理. ...

  2. 迷你图书管理器1.2 - 面向对象+集合

    迷你图书管理器 author:luckyboy! version:1.2 知识储备:变量.数据类型.选择结构.循环结构.数组 .面向对象.集合 系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的 ...

  3. Java迷你图书管理器1.2-面向对象+I/O流

    CSDN话题挑战赛第2期 参赛话题:Java技术分享 迷你图书管理器 author:luckyboy! version:1.2 知识储备:变量.数据类型.选择结构.循环结构.数组 .面向对象.集合和I ...

  4. 15、Java——迷你图书管理器(变量+数组)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  5. 14、Java——迷你图书管理器(对象+数组)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  6. 32、Java——迷你图书管理器(对象+JDBC)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  7. Java——迷你图书管理器(JDBC+MySQL+Apache DBUtils)

    ​ ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  8. 【Java-语言入门】开发 迷你图书管理器

    点击链接下载源码,编号填写:11 在学习中有不懂迷茫的童鞋们可以加我一起交流学习(联系方式看主页个签),无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!

  9. 20、Java——迷你图书管理器(对象+集合)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

最新文章

  1. [JAVAEE] 理解“自然模板“+使用 ModelAndView 对象
  2. Yann LeCun等最新研究:如何对未来实例分割进行预测?
  3. 测试适合眉形的软件_软件测试的自我修养:正向思维与逆向思维
  4. 解决前后端base64编码传递时的中文乱码问题
  5. 用 Python脚本实现数据库数据恢复
  6. 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL
  7. 什么是平板电脑的杀手锏?
  8. [原创]如何培养孩子的自信
  9. ashly理器4.8软件汉化版_工程造价专业 常用广联达CAD等软件 推荐什么笔记本电脑?...
  10. 使用Mac通知中心,生活讯息一眼看尽
  11. 宁愿自己多做点,也不愿意客户多做点
  12. java 欧拉_项目欧拉#6 Java协助
  13. linux scp命令 将数据从一台linux服务器复制到另一台linux服务器
  14. 你不能强迫别人进步,跟别人没法强迫你进步一样
  15. Python实现Mean Shift算法
  16. 亚马逊成功的四个关键因素
  17. (34.1)【登录越权/爆破专题】原理、字典资源、工具、利用过程……
  18. 转义字符 \r \v \f
  19. Mac重启Finder的技巧
  20. 鸿蒙系统桌面加插件,华为鸿蒙OS 2系统最常用UI桌面模块化体验

热门文章

  1. python画统计图
  2. codeforces1395D 贪心
  3. Tensorflow技术实践之mnist_ with_summaries.py报错
  4. 贝宝年报解读:是谁贷走了4.3亿美元?
  5. Luogu3426 [POI2005]SZA-Template (KMP)(未完成)
  6. 什么是防火墙?防火墙基础知识讲解
  7. PMP 考试应试技巧二十五条
  8. 访问学者在德国访学,值得推荐的特色美食有哪些?
  9. 容联云实现手机验证码
  10. RT-Thread 4.1.0 特性解析之LIBC与POSIX