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

迷你图书管理器

author:luckyboy!

version:1.2

知识储备:变量、数据类型、选择结构、循环结构、数组 、面向对象、集合

系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理。

功能:

  • 新增图书
  • 查看图书
  • 删除图书
  • 借出图书
  • 归还图书
  • 退出图书系统

创建 .Java文件:Book类、MyBookMgr类、Test测试类

阶段划分

  • 第一阶段:创建用来存储图书信息的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;
	}

	@Override
	public String toString() {
		return name + "\t" + state + "\t" + date
				+ "\t" + count;
	}
	
}

第二阶段:创建集合和初始化方法,将初始化图书信息加入到集合

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class MyBookMgr {
	Scanner in = new Scanner(System.in);
	//创建集合保存图书信息
	List<Book> list = new LinkedList<Book>();
    //初始化方法
	public void inti(){
		Book book1 = new Book("罗马假日", 1, 1, 15);
		Book book2 = new Book("白雪公主", 0, 0, 12);
		Book book3 = new Book("葫芦兄弟", 0, 0, 30);
		//将图书信息保存到集合
		list.add(book1);
		list.add(book2);
		list.add(book3);
	}
}

第三阶段:完成整体框架和退出功能,此时完成测试类测试功能

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class MyBookMgr {
	Scanner in = new Scanner(System.in);
	//创建集合保存图书信息
	List<Book> list = new LinkedList<Book>();
    //初始化方法
	public void inti(){
		Book book1 = new Book("罗马假日", 1, 1, 15);
		Book book2 = new Book("白雪公主", 0, 0, 12);
		Book book3 = new Book("葫芦兄弟", 0, 0, 30);
		//将图书信息保存到集合
		list.add(book1);
		list.add(book2);
		list.add(book3);
	}

    	//整体框架开始方法
	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() {
		//思路:实例化Book类,将新的图书信息添加到集合
		System.out.println("-> 新增图书");
		System.out.println("请输入您要增加的图书:");
		String bookName = in.next();
		//实例化Book类
		Book book = new Book(bookName, 0, 0, 0);
		//将图书信息添加到集合
		list.add(book);
		System.out.println("新增《"+bookName+"》成功!");
	}

第五阶段:完成查看图书功能

	//查看图书方法
	public void lookBook() {
		//思路:输出集合中的图书信息
		System.out.println("-> 查看图书");
		System.out.println("序号\t图书名称\t状态\t时间\t次数");
		for (int i = 0; i < list.size(); i++) {
			//设置图书状态,1显示已借出,0显示可借阅
			String states = list.get(i).getState() == 0 ? "可借阅" : "已借出";
			//设置借出时间,0日不显示,其它已 数字+日 的形式显示
			String dates = list.get(i).getDate() == 0 ? "" : list.get(i).getDate() + "日";
			//设置借出次数,数字+次 的形式显示
			String counts = list.get(i).getCount() + "次";
			System.out.println((i+1) + "\t" + list.get(i).getName() + "\t" + states
					 + "\t" + dates + "\t" + counts);
		}
	}

第六阶段:完成删除图书功能

	//删除图书方法
	public void delBook() {
		/*
		 * 思路:
		 * 在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
		 * 在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
		 * 在集合中没有匹配到用户输入的图书名称,提示图书不存在
		 */
		System.out.println("-> 删除图书");
		//设置标志位,区分图书是否存在
		boolean flag = false;
		System.out.println("请输入您要删除的图书:");
		String bookName = in.next();
		for (int i = 0; i < list.size(); i++) {
			//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
			if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
				list.remove(i);
				System.out.println("删除《"+ bookName + "》成功!");
				//图书存在,赋值true
				flag = true;
			}
			//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
			else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
				System.out.println("图书已借出,不能删除!");
				//图书存在,赋值true
				flag = true;
			}
		}
		//如果标志位flag等于false,表示图书u不存在,给出图示信息
		if(!flag){
			System.out.println("此图书不存在!");
		}
	}

第七阶段:完成借出图书功能

	//借出图书方法
	public void lendBook() {
		/*
		 * 图书状态可借阅,按照用户输入的图书名称借出指定图书,并判断输入的借出日期是否在1-31之间,否则重新输入日期。
		 * 图书状态已借出,给出相应提示
		 * 图书不存在,给出相应提示
		 * 
		 * 思路
		 * ->用户输入需要借出的图书
		 * ->判断图书是否存在
		 * ->图书存在,判断图书是否借出
		 * ->图书存在,可借阅,判断用户输入的借出日期
		 * ->图书存在,可借阅,借出日期正确,修改图书的状态,借出日期和借出次数加1
		 */
		System.out.println("-> 借出图书");
		//设置标志位,区分图书是否存在
		boolean flag = false;
		System.out.println("请输入您要借出的图书:");
		String bookName = in.next();
		for (int i = 0; i < list.size(); i++) {
			//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以借出
			if(list.get(i).getName().equals(bookName) && list.get(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();
				}
				//修改借出日期,图书状态,借出次数
				list.get(i).setDate(dates);
				list.get(i).setState(1);
				//图书借出次数加1
				int counts = list.get(i).getCount();
				list.get(i).setCount(counts);
				System.out.println("借出《"+ bookName + "》成功!");
				//图书存在,赋值true
				flag = true;
			}
			//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能借出
			else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
				System.out.println("图书已借出,不能重复借出!");
				//图书存在,赋值true
				flag = true;
			}
		}
		//如果标志位flag等于false,表示图书u不存在,给出图示信息
		if(!flag){
			System.out.println("此图书不存在!");
		}		
	}

第八阶段:完成归还图书功能

	//归还图书方法
	public void returnBook() {
		/*
		 * 用户归还已借出的图书并计算租金。如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
		 * 用户归还的图书未借出,给出相应提示。
		 * 用户归还的图书不存在,给出相应提示。
		 * 
		 * 思路:
		 * ->用户输入需要归还的图书
		 * ->判断图书是否存在
		 * ->判断图书是否借出
		 * ->判断用户输入的归还日期
		 * ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
		 */
		System.out.println("-> 归还图书");
		//设置标志位,区分图书是否存在
		boolean flag = false;
		System.out.println("请输入您要归还的图书:");
		String bookName = in.next();
		for (int i = 0; i < list.size(); i++) {
			//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书可以归还
			if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
				System.out.println("请输入借出日期(1-31):");
				int dates = in.nextInt();
				while(dates < list.get(i).getDate() || dates > 31){
					if(dates < list.get(i).getDate()){
						System.out.println("归还日期要大于借出日期,请重新输入:");
					}else{
						System.out.println("一个月最多31天,请重新输入:");
					}
					dates = in.nextInt();
				}
				//计算出租金,租金 = 归还日期 - 借出日期
				int price = dates - list.get(i).getDate();
				//修改归还图书的状态为可借阅,图示日期改为0
				list.get(i).setState(0);
				list.get(i).setDate(0);
				
				System.out.println("归还《" + bookName + "》成功!");
				System.out.println("应付租金:"+price);
				//图书存在,赋值true
				flag = true;
			}
			//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书不能归还
			else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
				System.out.println("图书未借出,不能归还!");
				//图书存在,赋值true
				flag = true;
			}
		}
		//如果标志位flag等于false,表示图书u不存在,给出图示信息
		if(!flag){
			System.out.println("此图书不存在!");
		}
	}

完整代码如下

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;
	}

	@Override
	public String toString() {
		return name + "\t" + state + "\t" + date
				+ "\t" + count;
	}
	
}

MyBookMgr类代码

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

public class MyBookMgr {
	Scanner in = new Scanner(System.in);
	// 创建集合保存图书信息
	List<Book> list = new LinkedList<Book>();

	// 初始化方法
	public void inti() {
		Book book1 = new Book("罗马假日", 1, 1, 15);
		Book book2 = new Book("白雪公主", 0, 0, 12);
		Book book3 = new Book("葫芦兄弟", 0, 0, 30);
		// 将图书信息保存到集合
		list.add(book1);
		list.add(book2);
		list.add(book3);
	}

	// 整体框架开始方法
	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() {
		//思路:实例化Book类,将新的图书信息添加到集合
		System.out.println("-> 新增图书");
		System.out.println("请输入您要增加的图书:");
		String bookName = in.next();
		//实例化Book类
		Book book = new Book(bookName, 0, 0, 0);
		//将图书信息添加到集合
		list.add(book);
		System.out.println("新增《"+bookName+"》成功!");
	}

	//查看图书方法
	public void lookBook() {
		//思路:输出集合中的图书信息
		System.out.println("-> 查看图书");
		System.out.println("序号\t图书名称\t状态\t时间\t次数");
		for (int i = 0; i < list.size(); i++) {
			//设置图书状态,1显示已借出,0显示可借阅
			String states = list.get(i).getState() == 0 ? "可借阅" : "已借出";
			//设置借出时间,0日不显示,其它已 数字+日 的形式显示
			String dates = list.get(i).getDate() == 0 ? "" : list.get(i).getDate() + "日";
			//设置借出次数,数字+次 的形式显示
			String counts = list.get(i).getCount() + "次";
			System.out.println((i+1) + "\t" + list.get(i).getName() + "\t" + states
					 + "\t" + dates + "\t" + counts);
		}
	}

	//删除图书方法
	public void delBook() {
		/*
		 * 思路:
		 * 在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
		 * 在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
		 * 在集合中没有匹配到用户输入的图书名称,提示图书不存在
		 */
		System.out.println("-> 删除图书");
		//设置标志位,区分图书是否存在
		boolean flag = false;
		System.out.println("请输入您要删除的图书:");
		String bookName = in.next();
		for (int i = 0; i < list.size(); i++) {
			//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以删除,使用remove删除
			if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
				list.remove(i);
				System.out.println("删除《"+ bookName + "》成功!");
				//图书存在,赋值true
				flag = true;
			}
			//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能删除
			else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
				System.out.println("图书已借出,不能删除!");
				//图书存在,赋值true
				flag = true;
			}
		}
		//如果标志位flag等于false,表示图书u不存在,给出图示信息
		if(!flag){
			System.out.println("此图书不存在!");
		}
	}

	//借出图书方法
	public void lendBook() {
		/*
		 * 图书状态可借阅,按照用户输入的图书名称借出指定图书,并判断输入的借出日期是否在1-31之间,否则重新输入日期。
		 * 图书状态已借出,给出相应提示
		 * 图书不存在,给出相应提示
		 * 
		 * 思路
		 * ->用户输入需要借出的图书
		 * ->判断图书是否存在
		 * ->图书存在,判断图书是否借出
		 * ->图书存在,可借阅,判断用户输入的借出日期
		 * ->图书存在,可借阅,借出日期正确,修改图书的状态,借出日期和借出次数加1
		 */
		System.out.println("-> 借出图书");
		//设置标志位,区分图书是否存在
		boolean flag = false;
		System.out.println("请输入您要借出的图书:");
		String bookName = in.next();
		for (int i = 0; i < list.size(); i++) {
			//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书可以借出
			if(list.get(i).getName().equals(bookName) && list.get(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();
				}
				//修改借出日期,图书状态,借出次数
				list.get(i).setDate(dates);
				list.get(i).setState(1);
				//图书借出次数加1
				int counts = list.get(i).getCount();
				list.get(i).setCount(counts);
				System.out.println("借出《"+ bookName + "》成功!");
				//图书存在,赋值true
				flag = true;
			}
			//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书不能借出
			else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
				System.out.println("图书已借出,不能重复借出!");
				//图书存在,赋值true
				flag = true;
			}
		}
		//如果标志位flag等于false,表示图书u不存在,给出图示信息
		if(!flag){
			System.out.println("此图书不存在!");
		}		
	}

	//归还图书方法
	public void returnBook() {
		/*
		 * 用户归还已借出的图书并计算租金。如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
		 * 用户归还的图书未借出,给出相应提示。
		 * 用户归还的图书不存在,给出相应提示。
		 * 
		 * 思路:
		 * ->用户输入需要归还的图书
		 * ->判断图书是否存在
		 * ->判断图书是否借出
		 * ->判断用户输入的归还日期
		 * ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
		 */
		System.out.println("-> 归还图书");
		//设置标志位,区分图书是否存在
		boolean flag = false;
		System.out.println("请输入您要归还的图书:");
		String bookName = in.next();
		for (int i = 0; i < list.size(); i++) {
			//在集合中匹配到用户输入的图书名称,图书状态为已借出,图书可以归还
			if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 1){
				System.out.println("请输入借出日期(1-31):");
				int dates = in.nextInt();
				while(dates < list.get(i).getDate() || dates > 31){
					if(dates < list.get(i).getDate()){
						System.out.println("归还日期要大于借出日期,请重新输入:");
					}else{
						System.out.println("一个月最多31天,请重新输入:");
					}
					dates = in.nextInt();
				}
				//计算出租金,租金 = 归还日期 - 借出日期
				int price = dates - list.get(i).getDate();
				//修改归还图书的状态为可借阅,图示日期改为0
				list.get(i).setState(0);
				list.get(i).setDate(0);
				
				System.out.println("归还《" + bookName + "》成功!");
				System.out.println("应付租金:"+price);
				//图书存在,赋值true
				flag = true;
			}
			//在集合中匹配到用户输入的图书名称,图书状态为可借阅,图书不能归还
			else if(list.get(i).getName().equals(bookName) && list.get(i).getState() == 0){
				System.out.println("图书未借出,不能归还!");
				//图书存在,赋值true
				flag = true;
			}
		}
		//如果标志位flag等于false,表示图书u不存在,给出图示信息
		if(!flag){
			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();
	}

}
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值