迷你图书管理器

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]!=nullSystem.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();}//修改图书的状态,日期和借出次数加1book[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]!=nullSystem.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();}//修改图书的状态,日期和借出次数加1book[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();}
}

迷你图书管理器1.1 - 面向对象+数组相关推荐

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

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

  2. 迷你图书管理器1.0 - 变量+数组

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. python面试-Python面试常问的10个问题
  2. 高德地图和百度地图接口封装遇到的问题(二):绘制带有方向箭头的折线
  3. java checkbox
  4. jQuery:表格的奇偶行变色,jquery实例之表格隔一行
  5. java面向对象计算机与CD实验,Java面向对象上机实验指导书.doc
  6. 数学分析原理 定理 6.8
  7. python 制作标签云
  8. 使用keybase给你的Github commit加上GPG Verified签名认证(keybase教程)
  9. xzp android webview,加载gif动态图的三种方式
  10. D3.js用动画渲染数据集的显示
  11. 99乘法口诀表用python写_python 99乘法口诀表
  12. 1012循环神经网络 RNN 的实现
  13. 哪些东西做引流产品比较好?哪些商品是每天比较受欢迎的?
  14. UVA 10158 (记忆化搜索)
  15. php的md5(),php MD5加密详解
  16. 关于有道云笔记md文档图片不显示的解决方案
  17. C语言算法题:简单密码
  18. 中文名转换成英文名(c#)
  19. 音视频技术开发周刊 | 250
  20. 【微信小程序】组件之页面布局

热门文章

  1. c语言中f的作用是什么,在C语言中printf中、《f》是什么?
  2. linux 用户文件字段解释,0220自学Linux_逻辑理解用户进程权限相关+理解文件内各字段(passwd,shadow,group)(示例代码)...
  3. Mockito简单使用及原理分析
  4. 浙江理工2015.12校赛-A
  5. 27计算机硬件中没有,苹果更新27英寸iMac电脑:外观无变化 但硬件配置更强大...
  6. 西安文理学院计算机系冯丽,张岗亭(计算机科学系)老师 - 西安文理学院 - 院校大全...
  7. 视觉里程计的重定位问题1——SVO的重定位部分
  8. 关于特别恶劣,特别流氓的软件卸载方法
  9. 个人仿QQ引导页html源码极速安装【美观大气】
  10. 一文掌握设计模式(定义+UML类图+应用)