迷你图书管理器1.1 - 面向对象+数组
迷你图书管理器
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.2 - 面向对象+集合
迷你图书管理器 author:luckyboy! version:1.2 知识储备:变量.数据类型.选择结构.循环结构.数组 .面向对象.集合 系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的 ...
- 迷你图书管理器1.0 - 变量+数组
迷你图书管理器 author:luckyboy! version:10 知识储备:变量.数据类型.选择结构.循环结构.数组 系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理. 功能: 新增 ...
- Java迷你图书管理器1.2-面向对象+I/O流
CSDN话题挑战赛第2期 参赛话题:Java技术分享 迷你图书管理器 author:luckyboy! version:1.2 知识储备:变量.数据类型.选择结构.循环结构.数组 .面向对象.集合和I ...
- 14、Java——迷你图书管理器(对象+数组)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- 15、Java——迷你图书管理器(变量+数组)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- 32、Java——迷你图书管理器(对象+JDBC)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- Java——迷你图书管理器(JDBC+MySQL+Apache DBUtils)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
- 【Java-语言入门】开发 迷你图书管理器
点击链接下载源码,编号填写:11 在学习中有不懂迷茫的童鞋们可以加我一起交流学习(联系方式看主页个签),无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!
- 20、Java——迷你图书管理器(对象+集合)
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.
最新文章
- python面试-Python面试常问的10个问题
- 高德地图和百度地图接口封装遇到的问题(二):绘制带有方向箭头的折线
- java checkbox
- jQuery:表格的奇偶行变色,jquery实例之表格隔一行
- java面向对象计算机与CD实验,Java面向对象上机实验指导书.doc
- 数学分析原理 定理 6.8
- python 制作标签云
- 使用keybase给你的Github commit加上GPG Verified签名认证(keybase教程)
- xzp android webview,加载gif动态图的三种方式
- D3.js用动画渲染数据集的显示
- 99乘法口诀表用python写_python 99乘法口诀表
- 1012循环神经网络 RNN 的实现
- 哪些东西做引流产品比较好?哪些商品是每天比较受欢迎的?
- UVA 10158 (记忆化搜索)
- php的md5(),php MD5加密详解
- 关于有道云笔记md文档图片不显示的解决方案
- C语言算法题:简单密码
- 中文名转换成英文名(c#)
- 音视频技术开发周刊 | 250
- 【微信小程序】组件之页面布局
热门文章
- c语言中f的作用是什么,在C语言中printf中、《f》是什么?
- linux 用户文件字段解释,0220自学Linux_逻辑理解用户进程权限相关+理解文件内各字段(passwd,shadow,group)(示例代码)...
- Mockito简单使用及原理分析
- 浙江理工2015.12校赛-A
- 27计算机硬件中没有,苹果更新27英寸iMac电脑:外观无变化 但硬件配置更强大...
- 西安文理学院计算机系冯丽,张岗亭(计算机科学系)老师 - 西安文理学院 - 院校大全...
- 视觉里程计的重定位问题1——SVO的重定位部分
- 关于特别恶劣,特别流氓的软件卸载方法
- 个人仿QQ引导页html源码极速安装【美观大气】
- 一文掌握设计模式(定义+UML类图+应用)