面向对象基本特征之封装

/**
	需求:1.欢迎来到我的图书借阅管理系统;
		 2.展示以下目录:1.查看书籍;2.借阅书籍;3.归还书籍;4.退出系统;
		    要求每次输入数字前,先展示目录
		 3.输入数字1,则查看书籍;输入数字2,则借阅书籍;输入数字3,则归还书籍;输入数字4,则退出系统
			现在我的图书借阅管理系统中已包含以下信息(图书名称分别为红楼梦 三国演义 西游记   图书编号对应为1  2  3;借出状态对应为:可借 可借 可借  借出次数: 0  0  0)
			设计一个图书借阅管理系统,用于管理书籍的借出状态
		
		分析:1.大的框架:
				1.先用一个数组来存放当前图书信息
				2.输入数字几,则进行什么操作,当输入4时,则退出整个系统;所以在main方法中采用while循环(不限定次数),当输入4时,break;输入数字前,每次都要先展示目录,所以将目录放在while循环中
			  2.业务逻辑,
				1.借书:先判断是否有这个书名,当书名存在时,再判断借出状态,当该书为可借时,则借出成功,同时将借出状态改为不可借,将借出次数加1;
			    当该书的借出状态为不可借时,提示书已借出,当书名未匹配到系统中的书名时,提示"系统中没有您要找的书"
				2.还书基本同上
		采用封装的方式来实现:1.属性私有化 2.使用带参的构造器,在创建对象的同时给属性赋值 3.通过对象调用该类的get()、set()方法来获取或改变属性值
						      通过封装能避免直接给属性赋值,将类中的属性隐藏起来
*/

import java.util.Scanner; 

//定义书类
class Book{
	//private修饰符定义的属性只能在当前类中被访问
	private int bookId;  //图书编号
	private String bookName;//图书名称
	private int bookState;  //图书状态,规定0表示可借,1表示不可借
	private int bookCount;  //图书借出次数
	
	//通过构造器给属性赋值
	public Book(int bookId,String bookName,int bookState,int bookCount){
		this.bookId = bookId;  //this表示当前对象
		this.bookName = bookName;
		this.bookState = bookState;
		this.bookCount = bookCount;
	}
	
	//修改书名
	public void setBookName(String bookName){
		this.bookName = bookName;
	}
	//获取书名
	public String getBookName(){
		return bookName;
	}
	
	//修改书编号
	public void setBookId(int bookId){
		this.bookId = bookId;
	}
	
	//获取书编号
	public int getBookId(){
		return bookId;
	}
	
	//修改书状态
	public void setBookState(int bookState){
		this.bookState = bookState;    
	}
	
	//获取书状态
	public int getBookState(){
		return bookState;
	}	
	
	//修改借出次数
	public void setBookCount(int bookCount){
		this.bookCount = bookCount;
	}
	
	//获取借出次数
	public int getBookCount(){
		return bookCount;
	}
}

public class TestBook{
	static Book[] input = new Book[3];//定义一个数组,在堆中开辟一块连续的空间来存放input变量的值
	                                  //在变量前加static就不需通过创建对象再来调用自身这个类的属性
	
	//存放图书馆中所有书籍信息
	public static void init(){
		//初始化三个对象
		Book b1 = new Book(1,"红楼梦",0,0);  
		Book b2 = new Book(2,"三国演义",0,0);
		Book b3 = new Book(3,"西游记",0,0);
		//给数组中元素赋初始值
		input[0] = b1;
		input[1] = b2;
		input[2] = b3;
		
	}
	
	//将展示目录定义为一个方法,在主程序中进行调用
	public static void menu(){
		System.out.println("=====================================");
		System.out.println("1.查看书籍");
		System.out.println("2.借阅书籍");
		System.out.println("3.归还书籍");
		System.out.println("4.退出系统");
		System.out.println("=====================================");
	}
	public static void main(String[] args){
		init();  //将图书信息初始化
		System.out.println("欢迎来到我的图书借阅管理系统");
		Scanner sc = new Scanner(System.in);
		while(true){
			menu();//每次输入数字前显示目录
			System.out.print("请输入一个数:");
			int num = sc.nextInt();
			if(num == 1){
				System.out.println("图书编号"+"\t"+"图书名称"+"\t"+"借出状态"+"\t"+"借出次数");
				for(int i=0;i<input.length;i++){
					//遍历数组中的元素,显示所有的图书信息
					String state = "";
					if(input[i].getBookState()==0){
						state = "可借";  
					}else{
						state = "不可借";
					}
					System.out.println(input[i].getBookId()+"\t\t"+input[i].getBookName()+"\t\t"+state+"\t\t"+input[i].getBookCount());
				}
			}else if(num == 2){
				System.out.print("请输入需要借阅的书名:");
				String name = sc.next();
				boolean bo = false;  //用于判断书名是否正确
				for(int i=0;i<input.length;i++){
					//循环遍历所有书名
					if(name.equals(input[i].getBookName())){
						bo = true;
						if(input[i].getBookState()==1){  //判断该书是否已借出
							System.out.println(input[i].getBookName()+"不可借");
						}else{
							System.out.println("成功借阅《"+input[i].getBookName()+"》");
							input[i].setBookState(1);  //借阅状态改为不可借
							input[i].setBookCount(input[i].getBookCount()+1); //该书借阅次数+1
							break; 
						}
					}
				}
				if(!bo){
					System.out.println("您输入的书名有误");
				}
			}else if(num == 3){
				System.out.print("请输入需要归还的书名:");
				String name = sc.next();
				boolean b = false;  
				for(int i=0;i<input.length;i++){
					if(name.equals(input[i].getBookName())){
						b = true;
						if(input[i].getBookState()==1){
							System.out.println("成功归还《"+input[i].getBookName()+"》");
							input[i].setBookState(0);
							break;
						}else{
							System.out.println(input[i].getBookName()+"已被归还,无需再归还");
						}
					}
				}
				if(!b){
					System.out.println("您输入的书名有误");
				}
			}else if(num == 4){
				System.out.println("欢迎您下次使用");
				break;
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值