迷你图书管理器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]!=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();
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值