类与对象(上)

学生管理系统

package my;

import java.util.Date;

/**
 * 功能:图书类
 * 属性:编号,名称,分类,图书状态(可借,借出,损坏,采购中)
 * 作者,出版社,描述,封面图片,借出时间,单价,租价,国家
 * 作者:松哥
 * 日期:2019年2月27日-上午11:02:49
 * 地址:鼠窝
 * 版权:&copy;<a href="http://www.xuetang9.com">老九学堂</a>2015-2019
 */
public class Book {
	/**
	 * 编号
	 */
	private String id;
	/**
	 * 书名
	 */
	private String name;
	/**
	 * 分类
	 */
	private String type;
	/**
	 * 状态(1.可借,2.借出,3.损坏,4.采购中)
	 */
	private int status;
	/**
	 * 作者
	 */
	private String author;
	/**
	 * 出版社
	 */
	private String publishor;
	/**
	 * 描述
	 */
	private String desc;
	/**
	 * 借出时间
	 */
	private Date borrowTime;
	/**
	 * 售价
	 */
	private double price;
	/**
	 * 租价
	 */
	private double borrowPrice;
	/**
	 * 默认构造方法
	 */
	public Book() {}
	/**
	 * 带参构造方法
	 * @param id-编号
	 * @param name-书名
	 * @param type-类型
	 * @param author-作者
	 * @param publishor-出版社
	 * @param desc-描述
	 * @param price-售价
	 * @param borrowPrice-租价
	 */
	public Book(String id, String name, String type, String author, String publishor, String desc, double price,
			double borrowPrice) {
		super();
		this.id = id;
		this.name = name;
		this.type = type;
		this.author = author;
		this.publishor = publishor;
		this.desc = desc;
		this.price = price;
		this.borrowPrice = borrowPrice;
	}
	@Override
	public String toString() {
		
		//三目运算 借出时间-如果借出时间不为空,则将时间数据装欢成字符窜赋值给borrowTimeStr
		String borrowTimeStr=null==borrowTime?"":borrowTime.toString();
		return ""+id+"\t"+name+"\t"+type+"\t"+author+"\t"+publishor+"\t"+desc+"\t"+
		borrowTimeStr+"\t"+price+"\t"+borrowPrice+"";
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPublishor() {
		return publishor;
	}
	public void setPublishor(String publishor) {
		this.publishor = publishor;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public Date getBorrowTime() {
		return borrowTime;
	}
	public void setBorrowTime(Date borrowTime) {
		this.borrowTime = borrowTime;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public double getBorrowPrice() {
		return borrowPrice;
	}
	public void setBorrowPrice(double borrowPrice) {
		this.borrowPrice = borrowPrice;
	}
}

图书管理系统的界面显示类

package my;

import java.util.Date;
import java.util.Scanner;
/**
 * 功能:图书管理系统的界面显示
 * 把重用的功能代码封装成方法,灵活使用do-while,switch-case和数组嵌套
 * 作者:松
 * 日期:2019年2月27日-上午11:19:24
 * 地址:鼠窝
 * 版权:&copy;<a href="http://www.xuetang9.com">老九学堂</a>2015-2019
 */
public class BookView {
	/**
	 * 定义Scanner变量接收用户输入的数据
	 */
	static Scanner input=new Scanner(System.in);
	/**
	 * 将用户管理业务层定义为本类的私有属性
	 */
	private UserServise userServise=new UserServise();
	/**
	 * 将图书管理系统业务层定义为本类的私有属性
	 */
	private BookService bookService=new BookService();
	/**
	 * 登录菜单方法
	 */
	public void longinMenu() {
		String[]menuLines= {
				"-----------------------------------------",
				"\t登录图书管理系统\t",
				"1.登录",
				"2.注册",
				"3.退出系统",
		};
		menuPrint(menuLines);//调用菜单打印方法
		inputNotice();//调用提示操作方法
	}
	/**
	 * 打印菜单方法(遍历字符串数组打印)
	 * @param menuLines
	 */
	private void menuPrint(String[]menuLines) {
		for (int i = 0; i < menuLines.length; i++) {
			String menuLine=menuLines[i];
			System.out.println(menuLine);
		}
	}
	/**
	 * 通用提醒用户选择操作
	 */
	private void inputNotice() {
		System.out.print("请选择你的操作:");
	}
	/**
	 * 程序登录逻辑-运用do-while和switch-case循环操作
	 */
	public void login() {
		boolean hasOperation=true;//定义boolean类型变量控制循环添加
		userServise.inital();//初始化用户管理
		do {
			longinMenu();//调用菜单方法的-每次循环都要显示菜单
			int choice=input.nextInt();//定义一个整形变量代表对应的操作
			switch (choice) {
			case 1:
				viewLogin();//1.登录
				break;
			case 2:
				viewAddUser();//2.注册
				System.out.println("注册成功!请登录系统!");
				viewLogin();
				break;
			case 3:
				hasOperation=false;//3.退出系统
				break;
			default:
				System.out.println("操作选择有误,请重新选择!");
				break;
			}
		} while (hasOperation);
	}
	/**
	 * 注册新用户
	 */
	public void viewAddUser() {
		User user=new User();
		System.out.println("\t用户注册信息录入\t");
		System.out.print("请输入用户名:");
		user.setName(input.next());
		System.out.print("请输入密码:");
		user.setPass(input.next());
		userServise.add(user);//调用用户管理类-将新注册的用户添加到用户对象数组中	
	}
	/**
	 * 用户登录系统
	 */
	public void viewLogin() {
		String uname="";//存放用户名-参与运算验证
		boolean loginSucces=false;//验证身份信息是否通过
		for (int i = 0; i < 3; i++) {//身份验证最多可以验证三次
			System.out.print("请输入用户名:");
			uname=input.next();
			System.out.print("请输入密码:");
			String pass=input.next();
			if(yanzheng(uname,pass)) {
				loginSucces=true;
				break;
			}else {
				System.out.println("用户名或密码错误!你还有"+(2-i)+"次机会!");
			}
		}
		if(loginSucces) {
			System.out.println(uname+"登录成功,进入主程序!");
			start();
		}
	}
	/**
	 * 验证用户信息
	 * @param uname
	 * @param pass
	 * @return
	 */
	private boolean yanzheng(String uname,String pass) {
		//验证用户登录信息,需要一个用户管理类,从用户管理类中获取用户的验证信息
		User handlers[]=userServise.getUsers();
		boolean loginSucces=false;//验证身份信息是否通过
		for (int j = 0; j < handlers.length; j++) {
			if(uname.equals(handlers[j].getName())&&pass.equals(handlers[j].getPass())) {
				loginSucces=true;
				break;
			}		
		}
		return loginSucces;
	}
	/**
	 * 显示主菜单方法
	 */
	public void mainMenu() {
		String[]menuLines= {
				"-----------------------------------------",
				"\t图书管理系统\t",
				"1.录入图书",
				"2.排序",
				"3.精确查找",
				"4.价格区间查找",
				"5.删除",
				"6.借阅",
				"7.归还",
				"8。返回上层"
		};//定义字符串数组-显示菜单,用户输入对应的数字进行程序执行相应的操作
		menuPrint(menuLines);
		inputNotice();
	}
	/**
	 * 图书管理系统运行主逻辑-使用do-while,switch-case循环判断用户选择的操作·是否会有接下来的操作
	 */
	public void start() {
		boolean hasOperation=true;
		bookService.inital();//图书对象数组初始化数据
		do {//开始程序业务循环操作
			mainMenu();//每次循环都要显示菜单
			int choice=input.nextInt();//定义int型变量用来接收用户输入选择操作
			switch (choice) {
			case 1:
				viewAddBook();
				break;
			case 2:
				viewSort();
				break;
			case 3:
				viewQueryByName();
				break;
			case 4:
				viewQueryByPrice();
				break;
			case 5:
				viewRemoveBook();
				break;
			case 6:
				viewBorrowBook();
				break;
			case 7:
				viewRebackBook();
				break;
			case 8:
				hasOperation=false;
				break;
			default:
				System.out.println("操作选择有误,请重新选择!");
				break;
			}
			
		} while (hasOperation);	
	}
	/**
	 * 录入图书-创建一个图书对象并为图书对象属性赋值
	 */
	public void viewAddBook() {
		Book recored=new Book();//创建图书对象
		System.out.println("\t图书信息录入\t");
		System.out.print("书名:");
		recored.setName(input.next());
		System.out.print("类型:");
		recored.setType(input.next());
		System.out.print("作者:");
		recored.setAuthor(input.next());
		System.out.print("出版社:");
		recored.setPublishor(input.next());
		System.out.print("描述:");
		recored.setDesc(input.next());
		System.out.print("单价:");
		recored.setPrice(input.nextDouble());
		System.out.print("租价:");
		recored.setBorrowPrice(input.nextDouble());
		recored.setId(bookService.randId());//设置书的编号
		recored.setStatus(bookService.BOOK_STATUS_CAN_BORROW);//设置图书对象的状态默认是可借的
		//录入图书需要一个图书管理数组存放录入的图书,建立一个图书管理业务类来保存图书
		bookService.add(recored);//调用业务类的图书对象添加到图书管理数组的方法
		displayBooks(bookService.getBooks());
	}
	/**
	 * 打印图书对象数组中所有有效图书对象
	 * @param books
	 */
	public void displayBooks(Book[]books) {
		System.out.println("序号\t编号\t名称\t分类\t图书状态\t作者\t出版社\t描述\t借出时间\t单价\t租价");
		if(null==books||books.length==0) return;//对图书对象数组参数进行验证,防止传入空元素
		for (int i = 0; i < books.length; i++) {
			Book book = books[i];
			if(null!=book) {//输出对象数组非空元素
				System.out.println((i+1)+"\t"+book.toString());//i+1表示序号
			}
		}	
	}
	/**
	 * 排序菜单界面
	 */
	public void sortMenu() {
		String[]menuLines= {
				"1.按名称降序排序",
				"2.按名称升序排序",
				"3.按ID降序排序",
				"4.按ID升序排序"
		};
		menuPrint(menuLines);//调用菜单显示方式
		inputNotice();//提示用户选择操作
	}
	/**
	 * 根据用户选择对应排序方式-并打印
	 */
	public void viewSort() {
		sortMenu();//调用菜单界面显示
		int choice=input.nextInt();
		switch (choice) {
		case 1://1.按名称降序排序
			displayBooks(bookService.sort(BookService.SORT_BY_NAME, BookService.SORT_DESC));
			break;
		case 2://2.按名称降序排序
			displayBooks(bookService.sort(BookService.SORT_BY_NAME, BookService.SORT_ASC));
			break;
		case 3://3.按ID降序排序
			displayBooks(bookService.sort(BookService.SORT_BY_ID, BookService.SORT_DESC));
			break;
		case 4://4.按ID降序排序
			displayBooks(bookService.sort(BookService.SORT_BY_ID, BookService.SORT_ASC));
			break;
		default:
			System.out.println("没有找到你想要的排序方法");
			break;
		}
	}
	/**
	 * 根据书名进行查询
	 */
	public void viewQueryByName() {
		System.out.print("请输入要查找书籍的名称:");
		String name=input.next();
		Book[]resultBooks=bookService.querByName(name);//调用服务类中的根据书名查找图书对象方法
		displayBooks(resultBooks);
	}
	/**
	 * 按照价格区间查找
	 */
	public void viewQueryByPrice() {
		System.out.print("查找的起始价格:");
		double priceBegin=input.nextDouble();
		System.out.print("查找结束价格:");
		double priceEnd=input.nextDouble();
		Book[]result=bookService.queryByPrice(priceBegin, priceEnd);
		displayBooks(result);
	}
	/**
	 * 删除图书对象-调用业务类根据书名查找对象方法-调用业务类删除对象方法
	 */
	public void viewRemoveBook() {
		System.out.print("删除书籍的名称:");
		String name=input.next();//调用业务类根据名称查找与用户输入名称相同的所有书籍对象,并显示
		Book[]books=bookService.querByName(name);
		System.out.println("找到如下书籍:");
		displayBooks(books);//调用输出数组对象属性方法
		if(books.length>0) {
			Book removeBook=null;
			//如果查找到对象只有一本书,就直接让用户确认是否删除,如果是多本书,要求用户输入书的序号在确认是否删除
			if(books.length==1) {
				removeBook=books[0];
			}else {
				System.out.print("请输入需要删除书籍的序号:");
				int inputIndex=input.nextInt();//如果是多本书籍,要求用户输入书籍的序号进行删除
				if(inputIndex>0&&inputIndex-1<books.length) {//对用户输入的序号进行验证是否合法
					removeBook=books[inputIndex-1];//将对应序列的图书对象记录
				}
			}
			if(null!=removeBook) {//如果removeBook不为空
				System.out.print("是否确认删除(y/n)?:");
				String choice=input.next();
				if("y".equalsIgnoreCase(choice)) {
					books=bookService.remove(removeBook);//调用业务类的删除对象方法
					displayBooks(books);
				}
			}	
		}else {
			System.out.println("没有找到相关的书籍");
		}	
	}
	/**
	 * 借阅书籍-调用业务类根据书名查找方法-并修改借出书籍的状态,记录借出的时间
	 */
	public void viewBorrowBook() {
		System.out.print("要借阅的图书名称:");
		String name=input.next();
		Book[]books=bookService.querByName(name);//调用业务类根据书名查找对象方法
		if(books.length>0) {
			Book borrowBook=null;//定义一个存放借阅图书的Book变量
			if(books.length==1) {//如果查找到的对象只有一个,就将这个对象赋值给借阅对象变量
				borrowBook=books[0];//记录
			}else {
				System.out.print("请输入借阅图书的序号:");
				int inputIndex=input.nextInt();
				if(inputIndex>0&&inputIndex-1<books.length) {//
					borrowBook=books[inputIndex-1];//将对应的元素赋值给借阅对象变量
				}
			}
			if(borrowBook!=null) {
				bookService.borrowBook(borrowBook);
				System.out.println("成功借阅!");
			}
		}else {
			System.out.println("本馆还没有收藏这本书!");
		}	
	}
	/**
	 * 归还图书
	 */
	public void viewRebackBook() {
		//查询所有已经被借出的图书,并显示
		System.out.println("已经被借出的图书有:");
		Book[]books=bookService.querBeBorrowBook();
		displayBooks(books);//调用打印图书对象数组方法
		System.out.print("请选择要归还的图书序号:");//提示输入用户归还自己那一本书的
		int inputIndex=input.nextInt();
		if(inputIndex>0&&inputIndex-1<books.length) {
			Book backBook=books[inputIndex-1];//接收数组对应下标图书对象
			//计算借出的时间-方便计算租金
			long borrowDay=(new Date().getTime()-backBook.getBorrowTime().getTime())/1000;		
			double pay=borrowDay*backBook.getBorrowPrice();
			System.out.println("图书借了"+borrowDay+"天,租金是"+pay+"元");
			System.out.print("确认归还(y/n)?:");
			String choice=input.next();
			if("y".equalsIgnoreCase(choice)) {//如果确认归还-需要修改图书状态
				//修改图书的状态-可借出
				backBook.setStatus(bookService.BOOK_STATUS_CAN_BORROW);
				backBook.setBorrowTime(null);//没有借出时间
			}
		}	
	}	
}

图书管理系统业务层

package my;

import java.util.Arrays;
import java.util.Date;
import java.util.UUID;
/**
 * 功能:图书管理系统业务层
 * 作者:松哥
 * 日期:2019年2月27日-上午11:21:52
 * 地址:鼠窝
 * 版权:&copy;<a href="http://www.xuetang9.com">老九学堂</a>2015-2019
 */
public class BookService {
	/**
	 * 常量:图书状态,可借出
	 */
	public static final int BOOK_STATUS_CAN_BORROW=1;
	/**
	 * 常量:图书状态,已借出
	 */
	public static final int BOOK_STATUS_BE_BORROW=2;
	/**
	 * 常量:图书状态,已损坏
	 */
	public static final int BOOK_STATUS_BROKEN=3;
	/**
	 * 常量:图书状态,购买中
	 */
	public static final int BOOK_STATUS_CAN_IS_BUYING=4;
	/**
	 * 按名称类型排序
	 */
	public static final int SORT_BY_NAME=1;
	/**
	 * 按ID类型排序
	 */
	public static final int SORT_BY_ID=1;
	/**
	 * 升序
	 */
	public static final boolean SORT_ASC=true;
	/**
	 * 降序
	 */
	public static final boolean SORT_DESC=false;
	/**
	 * 常量-数组每次扩容默认增长的空间值
	 */
	private static final int DERAULT_CARACITY=10;
	/**
	 * 定义一个图书对象数组-存放图书对象-属性变量数组,初始元素值为null
	 */
	private Book[]books= {};
	/**
	 * 定义一个整形变量-记录图书对象数组中存放图书的实际数量
	 */
	private int size;
	/**
	 * 默认构造方法-创建一个初始空间容量为10个单位的图书对象数组
	 */
	public BookService() {
		books=new Book[DERAULT_CARACITY];
	}
	/**
	 * 初始化方法
	 */
	public void inital() {
		Book book1 = new Book(randId(), "深入理解Java虚拟机", "Java", "周志明", "机械工业出版社", 
				"本书第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。",
				62.4, 3.0);
		book1.setStatus(BOOK_STATUS_CAN_BORROW);
		add(book1);
		Book book2 = new Book(randId(), "JAVA核心技术", "Java", "S.霍斯特曼", "机械工业出版社", 
				"Java领域*有影响力和价值的著作之一,与《Java编程思想》齐名,10余年全球畅销不衰,广受好评 根据Java SE 8全面更新,系统全面讲解Java语言的核心概念、语法、重要特性和开发方法,包含大量案例,实践性强",
				 94.0, 2.0);
		book2.setStatus(BOOK_STATUS_CAN_BORROW);
		add(book2);
		Book book3 = new Book(randId(), "深入理解Java虚拟机", "Java", "周志明", "机械工业出版社", 
				"本书第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。",
				22.4, 3.0);
		book3.setStatus(BOOK_STATUS_CAN_BORROW);
		add(book3);
	}
	/**
	 * 将图书对象添加到图书管理对象数组中
	 * @param book-图书对象
	 * @return
	 */
	public boolean add(Book book) {
		//对参数合法性进行验证
		if(null==book) return false;
		//图书对象数组空间进行验证-是否充足
		ensureCapacity();//调用数组空间容量判断方法
		books[size++]=book;//将新创建的图书对象赋值给图书对象数组对应下标位置元素
		return true;
	}
	/**
	 * 对图书对象数组空间容量进行验证处理
	 */
	public void ensureCapacity() {
		//容量处理-如果容量不足,进行空间扩容操作
		if(size>=books.length-1) {
			int newArrayLength=books.length+DERAULT_CARACITY;//新数组的空间容量
			books=Arrays.copyOf(books, newArrayLength);
		}
	}
	/**
	 * 服务层提供的排序方法
	 * @param type-排序的类型 SORT_BY_NAME,SORT_BY_ID;
	 * @param isAsc-是否是升序 SORT_ASC,SORT_DESC;
	 * @return
	 */
	public Book[]sort(int type,boolean isAsc){
		Book[]result=Arrays.copyOf(books, size);
		for (int i = 0; i < result.length; i++) {
			for (int j = 0; j < result.length-i-1; j++) {
				int diff=0;//定义一个存放字符串比较的结果的整形变量
				if(type==SORT_BY_NAME) {//用名称类型排序
					//如果前一个对象书名比后一个对象书名大,compareTo比较结果大于1,否则小于0
					diff=result[j].getName().compareTo(result[j+1].getName());
				}else if(type==SORT_BY_ID){//类型排序
					//如果是前一个对象ID比后面一个对象ID大,compateTo比较结果大于1,否则小于0;
					diff=result[j].getId().compareTo(result[j+1].getId());
				}
				boolean swap=false;
				//当diff比较两个对象结果非零值,则需要进行交换,进行交换时需要根据排序规则进行交换
				//如果是升序,则需要diff的值大于零才可以进行交换,小于零情况不需要交换
				if(isAsc==SORT_ASC&&diff>0) {
					swap=true;
				}else if(isAsc==SORT_DESC&&diff<0) {
					//如果是降序,则需要diff的值小于零才可以进行交换,大于零不进行交换
				    swap=true;
				}
				if(diff!=0&&swap) {
					Book tempBook=result[j];
					result[j]=result[j+1];
					result[j+1]=tempBook;
				}
			}
		}
		return result;
	}
	/**
	 * 根据参数在对象数组中查找相应符号的对象,
	 * @param name-书名
	 * @return-返回查找到对象的数组
	 */
	public Book[]querByName(String name){
		if(null==name) return new Book[] {};//对参数进行验证是否合法,不合法返回一个空数组,解决调用length的空异常
		Book[]result=new Book[size];//定义存放查找到书籍的对象数组
		int findCOunt=0;//查找到对应书籍的数量
		for (int i = 0; i < size; i++) {
			Book book=books[i];//接收对应下标的book对象
			if(name.equals(book.getName())) {
				result[findCOunt++]=book;//将找到的book对象存放到对象数组中
			}
		}
		return Arrays.copyOf(result, findCOunt);//返回一个存放对象数组的副本,去掉空的元素
	}
	/**
	 * 根据价格区间查找对应的图书对象
	 * @param begin-上行价格
	 * @param end-下行价格
	 * @return-返回存储查找到的书籍对象数组
	 */
	public Book[]queryByPrice(double begin,double end){
		//对参数合法性验证,起始价格不能为负数,最高价格不能小于最低价格,如果不合法返回一个空对象数组
		if(begin<0||end<begin) return new Book[] {};
		Book[]result=new Book[size];
		int queryCount=0;//计数器,查找到的书籍个数
		for (int i = 0; i < books.length; i++) {
			Book book=books[i];//接收对应下标的book对象
			if(null!=book) {
				//如果价格大于起始价格,小于接收价格,那么就是我们要查找的图书对象
				if(book.getPrice()>=begin&&book.getPrice()<=end) {
					result[queryCount++]=book;//将查找符合的书籍对象放入对象数组对应下标元素中
				}
			}
		}
		return Arrays.copyOf(result, queryCount);
	}
	/**
	 * 删除传入的对象
	 * @param book
	 * @return
	 */
	public Book[] remove(Book book) {
		if(null==book) return new Book[] {};//对参数合法性进行验证
		int removeIndex=-1;//定义整形变量-存放要删除对象的下标位置
		//定义for循环遍历查找对象数组中与参数对象匹配的元素下标
		for (int i = 0; i < size; i++) {
			Book loopBook=books[i];//接收图书对象数组对应下标元素
			if(loopBook.equals(book)) {
				removeIndex=i;//如果找到对应元素,则记录其在对象数组的下标位置
				break;
			}
		}
		if(removeIndex!=-1) {
			System.arraycopy(books, removeIndex+1, books, removeIndex, size-removeIndex);
		    size--;
		}
		return books;
	}
	/**
	 * 回收多余的空间-回收空间是DERAULT_CARACITY的倍数
	 */
	public void freeSpace() {
		if(books.length-size>DERAULT_CARACITY) {
			int freeLen=books.length-size-((books.length-size)%DERAULT_CARACITY);
			books=Arrays.copyOf(books, books.length-freeLen);
		}
	}
	/**
	 * 借阅图书成功-需要改变当前借出图书的状态-已借出,并且需要记录借出的时间
	 * @param borrowBook
	 */
	public void borrowBook(Book borrowBook) {
		borrowBook.setStatus(BOOK_STATUS_BE_BORROW);
		borrowBook.setBorrowTime(new Date());
	}
	/**
	 * 查找所有已借出状态的图书对象
	 * @return-返回存放查找到的图书数组
	 */
	public Book[]querBeBorrowBook(){
		Book[]result=new Book[size];//定义一个图书对象数组存放查找已经被借阅的图书
		int borrowedCount=0;//定义整形变量-表示已经借出的图书数量
		for (int i = 0; i < size; i++) {
			Book book=books[i];//定义一个图书对象变量-存放取出数组中的元素进行查找操作
			if(book.getStatus()==BOOK_STATUS_BE_BORROW) {//如果图书对象状态是已借出的状态
				result[borrowedCount++]=book;//将查找到对应状态的图书存入数组指定的下标元素中
			}
		}
		return Arrays.copyOf(result, borrowedCount);//返回存放查找到的图书数组,对图书数组的空元素剔除		
	}	
	/**
	 * 图书编号生成方法
	 * @return
	 */
	public String randId() {
		return UUID.randomUUID().toString();
	}
	public Book[] getBooks() {
		return Arrays.copyOf(books, size);
	}
	public int getSize() {
		return size;
	}
}

用户类

package my;

/**
 * 功能:用户类
 * 作者:松
 * 日期:2019年2月27日-上午11:58:30
 * 地址:鼠窝
 * 版权:&copy;<a href="http://www.xuetang9.com">老九学堂</a>2015-2019
 */
public class User {
	private String name;
	private String pass;
	/**
	 * 无参默认构造
	 */
	public User() {}
	/**
	 * 带参默认构造方法
	 * @param name-用户名
	 * @param pass-用户密码
	 */
	public User(String name, String pass) {
		this.name = name;
		this.pass = pass;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
}

用户管理类

/**
 * 
 */
package my;

import java.util.Arrays;

/**
 * 功能:用户管理类
 * 作者:松
 * 日期:2019年2月27日-下午12:02:42
 * 地址:鼠窝
 * 版权:&copy;<a href="http://www.xuetang9.com">老九学堂</a>2015-2019
 */
public class UserServise {
	/**
	 * 常量-用户数组每次默认增长的空间
	 */
	private static final int DILATATION=10;
	/**
	 * 定义一个用户对象数组-存放的是用户对象
	 * 属性变量数组-初始值为null
	 */
	private User[]users= {};
	/**
	 * 用户对象数组中存放用户的个数
	 */
	private int size;
	/**
	 * 默认构造方法
	 */
	public UserServise() {
		users=new User[DILATATION];
	}
	public boolean add(User user) {
		if(null==user) return false;
		ensureCapacity();
		users[size++]=user;
		return true;
	}
	/**
	 * 数组空间扩容-每次调用数组增长DERAULT_CAPACITY值
	 */
	public void ensureCapacity() {
		//容量的处理,如果容量不够,进行空间扩容,
		if(size>=users.length-1) {
			int newArrayLength=users.length+DILATATION;
			users=Arrays.copyOf(users, newArrayLength); 
		}
	}
	public void inital() {
		User user1=new User("徐松","asd");
		add(user1);
		User user2=new User("陈昕璇","123456");
		add(user2);
	}
	/**
	 * 这里外部获取的是用户对象数组的副本
	 * @return
	 */
	public User[] getUsers() {
		return Arrays.copyOf(users, size);
	}
	public int getSize() {
		return size;
	}	
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值