面向对象基本特征之封装

/**
	需求: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;
			}
		}
	}
}
【Koopman】遍历论、动态模态分解和库普曼算子谱特性的计算研究(Matlab代码实现)内容概要:本文围绕【Koopman】遍历论、动态模态分解和库普曼算子谱特性的计算研究展开,重点介绍基于Matlab的代码实现方法。文章系统阐述了遍历理论的基本概念、动态模态分解(DMD)的数学原理及其与库普曼算子谱特性之间的内在联系,展示了如何通过数值计算手段分析非线性动力系统的演化行为。文中提供了完整的Matlab代码示例,涵盖数据驱动的模态分解、谱分析及可视化过程,帮助读者理解并复现相关算法。同时,文档还列举了多个相关的科研方向和技术应用场景,体现出该方法在复杂系统建模与分析中的广泛适用性。; 适合人群:具备一定动力系统、线性代数与数值分析基础,熟悉Matlab编程,从事控制理论、流体力学、信号处理或数据驱动建模等领域研究的研究生、博士生及科研人员。; 使用场景及目标:①深入理解库普曼算子理论及其在非线性系统分析中的应用;②掌握动态模态分解(DMD)算法的实现与优化;③应用于流体动力学、气候建模、生物系统、电力系统等领域的时空模态提取与预测;④支撑高水平论文复现与科研项目开发。; 阅读建议:建议读者结合Matlab代码逐段调试运行,对照理论推导加深理解;推荐参考文中提及的相关研究方向拓展应用场景;鼓励在实际数据上验证算法性能,并尝试改进与扩展算法功能。
本系统采用微信小程序作为前端交互界面,结合Spring Boot与Vue.js框架实现后端服务及管理后台的构建,形成一套完整的电子商务解决方案。该系统架构支持单一商户独立运营,亦兼容多商户入驻的平台模式,具备高度的灵活性与扩展性。 在技术实现上,后端以Java语言为核心,依托Spring Boot框架提供稳定的业务逻辑处理与数据接口服务;管理后台采用Vue.js进行开发,实现了直观高效的操作界面;前端微信小程序则为用户提供了便捷的移动端购物体验。整套系统各模块间紧密协作,功能链路完整闭环,已通过严格测试与优化,符合商业应用的标准要求。 系统设计注重业务场景的全面覆盖,不仅包含商品展示、交易流程、订单处理等核心电商功能,还集成了会员管理、营销工具、数据统计等辅助模块,能够满足不同规模商户的日常运营需求。其多店铺支持机制允许平台方对入驻商户进行统一管理,同时保障各店铺在品牌展示、商品销售及客户服务方面的独立运作空间。 该解决方案强调代码结构的规范性与可维护性,遵循企业级开发标准,确保了系统的长期稳定运行与后续功能迭代的可行性。整体而言,这是一套技术选型成熟、架构清晰、功能完备且可直接投入商用的电商平台系统。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值